Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Timestamp / 21 сообщений из 21, страница 1 из 1
27.12.2004, 17:49
    #32846651
Рус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Как запихнуть значение указанного типа в строку sql запроса, понятную ораклу с использованием функции TO_DATE? Спасибо
...
Рейтинг: 0 / 0
27.12.2004, 17:52
    #32846659
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
РусКак запихнуть значение указанного типа в строку sql запроса, понятную ораклу с использованием функции TO_DATE? Спасибо
не знаю ничего насчет оракла. денис попов ответит :)

но общий вариант примерно такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
String qry = "insert into mytable (mdate) values(?)";
PreparedStatement st = con.prepareStatement(qry);
Timestamp t = ...;
st.setTimestamp( 1 , t);
st.executeUpdate();
...
...
Рейтинг: 0 / 0
28.12.2004, 11:02
    #32847255
z
z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
А.Грасоff™ РусКак запихнуть значение указанного типа в строку sql запроса, понятную ораклу с использованием функции TO_DATE? Спасибо
не знаю ничего насчет оракла. денис попов ответит :)

но общий вариант примерно такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
String qry = "insert into mytable (mdate) values(?)";
PreparedStatement st = con.prepareStatement(qry);
Timestamp t = ...;
st.setTimestamp( 1 , t);
st.executeUpdate();
...


тоже самое, советую делать именно через to_date, вместо timestamp(не совсем коректно работает, может не включать именно Эту секунду). а при селекте timestamp рулит.
Код: plaintext
1.
2.
3.
4.
5.
6.
...
String qry = "insert into mytable (mdate) values(to_date(?, 'hhhhmmdd hh24:mi:ss'))";
CallableStatement st = con.prepareCall(qry);
String t = "20041225 20:34:45";
st.setString( 1 , t);
st.executeUpdate();
...
...
Рейтинг: 0 / 0
28.12.2004, 14:13
    #32847813
Рус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
спасибо, все дело в том, что у меня метод toString объекта Timestamp выводит в формате 'yyyy-mm-dd hh:mi:ss.0' Где красным мне не понятно что за элемент даты.
...
Рейтинг: 0 / 0
28.12.2004, 14:16
    #32847819
Рус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Русспасибо, все дело в том, что у меня метод toString объекта Timestamp выводит в формате 'yyyy-mm-dd hh:mi:ss.0' Где красным мне не понятно что за элемент даты.
прочитал в javadoc, что Timestamp выводит в формате 'yyyy-mm-dd hh:mm:ss.fffffffff' Но мой Oracle9i не понимает такой формат...
...
Рейтинг: 0 / 0
28.12.2004, 14:17
    #32847822
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Русспасибо, все дело в том, что у меня метод toString объекта Timestamp выводит в формате 'yyyy-mm-dd hh:mi:ss.0' Где красным мне не понятно что за элемент даты.
javadoc читать иногда надо.

оттуда:

javadoc
java.sql.Timestamp

public java.lang.String toString()

Formats a timestamp in JDBC timestamp escape format. yyyy-mm-dd hh:mm:ss.fffffffff,
where ffffffffff indicates nanoseconds.

...

Overrides:
toString in class Date
Returns:
a String object in yyyy-mm-dd hh:mm:ss.fffffffff format
...
Рейтинг: 0 / 0
28.12.2004, 14:19
    #32847827
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Рус Русспасибо, все дело в том, что у меня метод toString объекта Timestamp выводит в формате 'yyyy-mm-dd hh:mi:ss.0' Где красным мне не понятно что за элемент даты.
прочитал в javadoc, что Timestamp выводит в формате 'yyyy-mm-dd hh:mm:ss.fffffffff' Но мой Oracle9i не понимает такой формат...

зачем втсавлять дату строкой? если так надо - форматируй дату как
душе пожелается, используя класс, например, java.text.SimpleDateFormat,
который позволяет делать date -> text и наоборот.
...
Рейтинг: 0 / 0
28.12.2004, 14:24
    #32847841
Рус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
попытался пойти другим путем, по подсказке А.Грасоff™. А именно:
получил ClassCastException когда пытался сделать st.setObject(1, aValue, Types.Timstamp); Где aValue получено rs.getObject(1);
...
Рейтинг: 0 / 0
28.12.2004, 14:30
    #32847863
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Руспопытался пойти другим путем, по подсказке А.Грасоff™. А именно:
получил ClassCastException когда пытался сделать st.setObject(1, aValue, Types.Timstamp); Где aValue получено rs.getObject(1);

а что возвращается в твоем коде:

Код: plaintext
1.
2.
3.
Object aValue = rs.getObject( 1 );
String cn = aValue.getClass().getName();
System.out.println(cn); // здесь что имеем?
...
Рейтинг: 0 / 0
28.12.2004, 14:33
    #32847873
Рус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
java.sql.Timestamp

хотя metaData.getColumnTypeName(1) выдает DATE
...
Рейтинг: 0 / 0
28.12.2004, 14:35
    #32847885
Рус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
просто я немного неполно привел пример, я делаю st.setObject(1, aValue, metaData.getColumnType(1))
...
Рейтинг: 0 / 0
28.12.2004, 14:36
    #32847887
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
зачем использовать setObject() вместо setTimestamp() ?

PS есть такой принцип программирования - K.I.S.S. (keep it simple stupid)

--
Lacrima Mosa Est
...
Рейтинг: 0 / 0
28.12.2004, 14:39
    #32847898
Рус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
дело в том, чо у меня заранее неизвестен тип, либо придется делать case. Я решил использовать информацию о типе поля из metaData
...
Рейтинг: 0 / 0
28.12.2004, 14:43
    #32847904
Рус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
помогло вот что:
type = metaData.getColumnType(1);
if (type == Types.DATE) type = Types.TIMESTAMP;


но почему, блин, тип объекта и тип в мета данных разный?? Может, это особеенность моего драйвера jdbc?
...
Рейтинг: 0 / 0
28.12.2004, 14:53
    #32847937
z
z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Руспомогло вот что:
type = metaData.getColumnType(1);
if (type == Types.DATE) type = Types.TIMESTAMP;


но почему, блин, тип объекта и тип в мета данных разный?? Может, это особеенность моего драйвера jdbc?

timestamp не рекомендую!!!
а вот так получается дата ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SimpleDateFormat nice =  new  SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
GregorianCalendar cal =  new  GregorianCalendar();
java.util.Date date = cal.getTime();

String dateStr = nice.format(date);



...
Рейтинг: 0 / 0
28.12.2004, 14:58
    #32847953
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
ztimestamp не рекомендую!!!
а че так?
...
Рейтинг: 0 / 0
28.12.2004, 15:07
    #32847981
z
z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
А.Грасоff™ ztimestamp не рекомендую!!!
а че так?

на 9-ке делал
Код: plaintext
1.
2.
3.
select ..
from ...
where dtime between ? and ?
для случая когда у первой даты время

0 часов 0 минут 0 секунд(у оракла это не 28-дек-2004 00:00:00, а 28-дек-2004), то оракл не рюхнет это время и эта запись не попадет в выборку...

во всех остальных случаях вроде все ок
...
Рейтинг: 0 / 0
28.12.2004, 15:29
    #32848043
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
z для случая когда у первой даты время

0 часов 0 минут 0 секунд(у оракла это не 28-дек-2004 00:00:00, а 28-дек-2004), то оракл не рюхнет это время и эта запись не попадет в выборку...
Можешь показать пример запроса с указанием значений передаваемых параметров Timestamp'ов?
...
Рейтинг: 0 / 0
28.12.2004, 15:31
    #32848053
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Denis Popov z для случая когда у первой даты время

0 часов 0 минут 0 секунд(у оракла это не 28-дек-2004 00:00:00, а 28-дек-2004), то оракл не рюхнет это время и эта запись не попадет в выборку...
Можешь показать пример запроса с указанием значений передаваемых параметров Timestamp'ов?:) я так и знал :)
...
Рейтинг: 0 / 0
28.12.2004, 16:08
    #32848181
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Просто ИМХО если бы обнаружилась такая ошибка, то она стала бы головною болью многих. А так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Connection con;
...

Statement st = con.createStatement();

 try  {
  st.execute("drop table test");
}  catch  (SQLException e) {
}
st.execute("create table test (date_value date)");

Timestamp from =  new  Timestamp( 104 ,  0 ,  1 ,  0 ,  0 ,  0 ,  0 );
PreparedStatement pst = con.prepareStatement(
  "insert into test (date_value)\n" +
  "select ? + (rownum - 1) / 24\n" +
  "from scott.emp"
);
pst.setTimestamp( 1 , from);
pst.execute();

pst = con.prepareStatement(
  "select date_value from test\n" +
  "where date_value between ? and ?\n" +
  "order by date_value"
);

Timestamp to =  new  Timestamp( 105 ,  0 ,  1 ,  0 ,  0 ,  0 ,  0 );
pst.setTimestamp( 1 , from);
pst.setTimestamp( 2 , to);
ResultSet rs = pst.executeQuery();
 while  (rs.next()) {
  System.out.println(rs.getTimestamp("date_value"));
}

Выводятся все 14 записей, у первой - нулевое время.
...
Рейтинг: 0 / 0
29.12.2004, 10:52
    #32849100
z
z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timestamp
Прошу прощения, дествительно все пашет.
Я наверно когда тестил, забыл милисекунды устанавливать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Timestamp / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]