Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > PreparedStatement.Парам. типа Date


Автор: Sleepy_PIP 24.11.2004, 19:30
Код

//=============================================================================
public long DoMakeStartSSRec(PIPFTPSite fs) throws Exception
{
 DBConnItem dbc = db.ConnectDB();
 dbc.DBConn.setAutoCommit(true);

 long nidss = db.GetGenVal("SSCAN_G", dbc.DBConn);
 PreparedStatement up = dbc.DBConn.prepareStatement(
       "insert into site_scan (id,SCAN_STARTTIME,IDSITE,STAT) values (?,?,?,?)");
 up.setLong(1, nidss);
 Date dd=new Date();
 up.setDate(2, dd);
 up.setLong(3,fs.idsite);
 up.setLong(4,1);
 up.execute();  
 up.close();
 dbc.DBConn.close();
 return(nidss);
}


ругается что: reference to Date is ambiguous; both class java.sql.Date and java.util.Date in java.util math.
оба пакета включены как
Код

import java.util.*;
import java.sql.*;

и совершенно нет желания включать все классы пакетов по отдельности.
Я понимаю что совпадают имена классов, а как-ж теперь быть?
Спасибо!

Автор: LSD 24.11.2004, 20:47
Код

import java.util.*;
import java.sql.*;
import java.util.Date;

Тогда Date будет трактоваться как java.util.Date.

Автор: Domestic Cat 24.11.2004, 20:48
Пиши

Цитата

Date date = new java.util.Date();



Автор: Sleepy_PIP 24.11.2004, 22:33
Цитата(Domestic @ 24.11.2004, 20:48)
Пиши

Цитата

Date date = new java.util.Date();

а вот уже стало интересно - в java.util.Date и в java.sql.Date - одинаковая реализация?
Если нет - то в чем разница? если да - то как-ж так получилось?
smile
Спасибо!

Автор: Domestic Cat 24.11.2004, 22:40
java.sql.Date, согласно документации - простo "обертка" для количествa миллисекунд, прошедших с 1970 года. java.util.Date - более наворочен, содержиt больше методов, т.е. то что для SQL нe нужно.
Вечером сравню их код и более подробно скажу smile

Автор: LSD 24.11.2004, 23:50
java.sql.Date extends java.util.Date
Добавлено @ 23:53
Цитата(Domestic @ 24.11.2004, 20:48)
Date date = new java.util.Date();

Тоже будет ошибка, т.к. компилятор не знает какого типа переменная.

Автор: Domestic Cat 24.11.2004, 23:59
Цитата
java.sql.Date extends java.util.Date


smile smile
вразумил дурака

а отличие одно - чтобы датa подходила для сиквела класс перегружает метод setTime который:

Цитата
Sets an existing Date object using the given milliseconds time value. If the given milliseconds value contains time information, the driver will set the time components to the  time in the default time zone (the time zone of the Java virtual  machine running the application) that corresponds to zero GMT

Добавлено @ 00:02
Цитата
Тоже будет ошибка, т.к. компилятор не знает какого типа переменн


Код

java.util.Date date = new java.util.Date();

Автор: Domestic Cat 25.11.2004, 04:22
Посмотрел я сорцы - на самом деле отличие только в методах toString() и valueOf() которые возвращают значение в несколько ином формате. А setTime просто вызывает super().

Автор: Sleepy_PIP 25.11.2004, 09:48
Цитата(Domestic @ 25.11.2004, 04:22)
Посмотрел я сорцы - на самом деле отличие только в методах toString() и valueOf() которые возвращают значение в несколько ином формате. А setTime просто вызывает super().

пришлось сделать так:
Код

//=============================================================================
public long DoMakeStartSSRec(PIPFTPSite fs) throws Exception
{
 DBConnItem dbc = db.ConnectDB();
 dbc.DBConn.setAutoCommit(true);

 long nidss = db.GetGenVal("SSCAN_G", dbc.DBConn);
 PreparedStatement up = dbc.DBConn.prepareStatement(
       "insert into site_scan (id,SCAN_STARTTIME,IDSITE,STAT) values (?,?,?,?)");
 up.setLong(1, nidss);
 Date df=new Date();
 java.sql.Date dd=new java.sql.Date(df.getTime());
 up.setDate(2, dd);
 up.setLong(3,fs.idsite);
 up.setLong(4,1);
 up.execute();  //GregorianCalendar
 up.close();
 dbc.DBConn.close();
 return(nidss);
}



но такая конструкция
Код

 Date df=new Date();
 java.sql.Date dd=new java.sql.Date(df.getTime());
 up.setDate(2, dd);


совершенно не нравится ... я на правильном пути, или надо действовать как-то по другому?
Спасибо!


Автор: 3,14 25.11.2004, 11:48
Можно сделать ещё так:
Код

 Calendar calendar = Calendar.getInstance();
 java.sql.Date dd  = new java.sqlDate(calendar.getTimeInMillis());

Хотя не знаю лучше ли этот вариант smile

Автор: Sleepy_PIP 25.11.2004, 12:22
Цитата(3 @ 25.11.2004, 11:48)
Можно сделать ещё так:
Код

 Calendar calendar = Calendar.getInstance();
 java.sql.Date dd  = new java.sqlDate(calendar.getTimeInMillis());

Хотя не знаю лучше ли этот вариант smile

календарь я могу положить туда и через
 void setDate(int parameter Index, Date x, Calendar cal)  
но не в этом дело. я пытаюсь как можно прощее научиться класть баналюную текущую дату.

Автор: 3,14 25.11.2004, 12:31
Дык ежели просто текущую, то легче модифицровать SQL запрос:
Код

 "insert into site_scan (id,SCAN_STARTTIME,IDSITE,STAT) values (?,now(),?,?)"

Автор: Sleepy_PIP 25.11.2004, 12:34
Цитата(3 @ 25.11.2004, 12:31)
Дык ежели просто текущую, то легче модифицровать SQL запрос:
Код

 "insert into site_scan (id,SCAN_STARTTIME,IDSITE,STAT) values (?,now(),?,?)"

текущую дату мне хотелось-бы получать с клиента, а не с сервера ...

Автор: Domestic Cat 25.11.2004, 16:20
Можно так попробовать:

Код

java.sql.Date dd = new java.sql.Date(System.currentTimeMillis());
up.setDate(2, dd);

Автор: Sleepy_PIP 25.11.2004, 17:15
Цитата(Domestic @ 25.11.2004, 16:20)
Можно так попробовать:

Код

java.sql.Date dd = new java.sql.Date(System.currentTimeMillis());
up.setDate(2, dd);

Во! ОТЛИЧНО!
Код

up.setDate(2, new java.sql.Date(System.currentTimeMillis()));

прекрасно компиляется. только надо еще проверить правильность даты.
СПАСИБО!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)