Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка в запросе / 12 сообщений из 12, страница 1 из 1
29.03.2006, 13:25
    #33632135
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
Спрашиваю именно здесь т.к. ошибка на стороне Java-клиента.
Пишу запрос:
Код: plaintext
1.
2.
3.
4.
select nmac, nip, nportnum, nswitch, 
to_char(ndatas,'YYYY-MM-DD'),nproxy,nroom,nfloor,nvlan,nmtuset,ndescription,nmtuuser,nmail, new  
from user.port where   to_char(ndatas,'YYYY-MM-DD') between 
TO_TIMESTAMP('2006-03-29 00:00:00.0','YYYY-MM-DD HH24:MI:SS.FF')  and
TO_TIMESTAMP('2006-03-29 00:00:00.0','YYYY-MM-DD HH24:MI:SS.FF');
Запускаю его в sqlPlus на оракле все работает отлично, запускаю на клиенте, получаю:
Код: plaintext
java.sql.SQLException: ORA- 01843 : месяц неверен
офигеть можно, тот же запрос ведь, не могу понять.
В java делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    String D1=getTimeStamp(dateOne.getDate()).toString();
    String D2=getTimeStamp(dateTwo.getDate()).toString();
"select .,...,  to_char(ndatas,'YYYY-MM-DD') where to_char(ndatas,'YYYY-MM-DD') between "+"TO_TIMESTAMP("+"'"+D1+"'"+",'YYYY-MM-DD HH24:MI:SS.FF') "+" and "+"TO_TIMESTAMP("+"'"+D2+"'"+",'YYYY-MM-DD HH24:MI:SS.FF')"
...............
где-то 
 public  Timestamp getTimeStamp(java.util.Date d){
     java.text.SimpleDateFormat format =  new  java.text.SimpleDateFormat("yyyy-MM-dd");
         String dateString = format.format(d);
  Timestamp ts= new  Timestamp(Date.valueOf(dateString).getTime());
   return  ts;
}
Поле ndatas в базе оракла имеет тип Timestamp(6)
Что ему нафиг надо, кто поможет,спасибо.
...
Рейтинг: 0 / 0
29.03.2006, 14:22
    #33632422
Ошибка в запросе
Посмотри:
Код: plaintext
1.
System.out.println(D1);
Чтобы не було проблем, используй связываемые переменные или форматируй в джаве свои даты в соответствии с тем, форматом, который указываешь (YYYY-MM-DD HH24:MI:SS.FF).

Промолчу, что сам запрос какой-то сомнительный.
...
Рейтинг: 0 / 0
29.03.2006, 14:33
    #33632509
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
Ты сам себе жизнь усложняешь ненужными форматированиями данных, работай с датами
напрямую.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
29.03.2006, 14:48
    #33632600
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
Ненавижу регистрациюПосмотри:
Код: plaintext
1.
System.out.println(D1);
Чтобы не було проблем, используй связываемые переменные или форматируй в джаве свои даты в соответствии с тем, форматом, который указываешь (YYYY-MM-DD HH24:MI:SS.FF).

Промолчу, что сам запрос какой-то сомнительный.
Я знаю, что сомнительный, но так надо
System.out.println=Wed Mar 29 12:15:10 EEST 2006
...
Рейтинг: 0 / 0
29.03.2006, 15:32
    #33632795
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
Решил по совету Дениса работать напрямую с датами.
Итак,поле ndatas имеет тип Data
Делаю запрос:
Код: plaintext
insert into fractal.port (nmac, nip, nportnum, nswitch,ndatas) values('000b.db7e.6c1f','10.104.1.15','Fa1/0/13','10.100.0.104','2006-03-29');
Выдает:
Код: plaintext
java.sql.SQLException: ORA- 01861 : литерал не соответствует формату строки
Как побороть
...
Рейтинг: 0 / 0
29.03.2006, 15:48
    #33632864
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
Под словами "работать с датами напрямую" я имел в виду параметризированные запросы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Date dt;
...
PreparedStatement pst = con.prepareStatement(
  "insert into my_table (my_date) values (?)"
);
pst.setDate( 1 , dt);
pst.execute();
...
Рейтинг: 0 / 0
29.03.2006, 16:18
    #33632983
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
[quot Denis Popov]Под словами "работать с датами напрямую" я имел в виду параметризированные запросы.
Код: plaintext
1.
2.
3.
4.
5.
Date dt;
...
PreparedStatement pst = con.prepareStatement(
  "insert into my_table (my_date) values (?)"
);
Я почему затеял всю эту заворуху с датами, дело в том, одной из задач моей проги это считывание значений из текстового файла, в котором присутствуют даты вида: [SRC java]Wed Mar  29   12 : 32 : 00   2006   
, но по сути дела это не дата, а строка, поэтому мне приходиться делать конверт строки-даты в объект Date. Вот поэтому столько гемороя возникло.
...
Рейтинг: 0 / 0
29.03.2006, 16:20
    #33632988
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
блин
Я почему затеял всю эту заворуху с датами, дело в том, одной из задач моей проги это считывание значений из текстового файла, в котором присутствуют даты вида:
Код: plaintext
 Wed Mar  29   12 : 32 : 00   2006 
, но по сути дела это не дата, а строка, поэтому мне приходиться делать конверт строки-даты в объект Date. Вот поэтому столько гемороя возникло.
...
Рейтинг: 0 / 0
29.03.2006, 16:55
    #33633106
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
Расскажите в трех словах, что означает "alter session set nls_date_format='yyyy-mm-dd'" , нафиг оно нужно?
Спасибо
...
Рейтинг: 0 / 0
29.03.2006, 16:59
    #33633122
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
Первый запрос был:
Код: plaintext
1.
2.
3.
4.
select nmac, nip, nportnum, nswitch, 
to_char(ndatas,'YYYY-MM-DD'),nproxy,nroom,nfloor,nvlan,nmtuset,ndescription,nmtuuser,nmail, new  
from user.port where   to_char(ndatas,'YYYY-MM-DD') between 
TO_TIMESTAMP('2006-03-29 00:00:00.0','YYYY-MM-DD HH24:MI:SS.FF')  and
TO_TIMESTAMP('2006-03-29 00:00:00.0','YYYY-MM-DD HH24:MI:SS.FF');
Вопрос: зачем такие навороты?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Date dateOne;
Date dateTwo;
...
PreparedStatement pst = con.prepareStatement(
  "select * from user.port where ndatas between ? and ?"
);
pst.setDate( 1 , dateOne);
pst.setDate( 2 , dateTwo);
ResultSet rs = pst.executeQuery();

Тебе надо лишь считать строку из текстового файла и сделать из нее дату.
Код: plaintext
1.
2.
3.
4.
String str = "Wed Mar 29 12:32:00 2006";
Locale.setDefault(Locale.UK);
SimpleDateFormat format =  new  java.text.SimpleDateFormat("EEE MMM d HH:mm:ss yyyy");
java.sql.Date date =  new  java.sql.Date(format.parse(str).getTime());

Расскажите в трех словах, что означает "alter session set nls_date_format='yyyy-mm-dd'" , нафиг оно нужно?
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_22a.htm#2053524
...
Рейтинг: 0 / 0
29.03.2006, 17:17
    #33633190
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
полностью согласен, просто тут код старый и так впадло его переписывать
у меня по ходу вопросик вот хранятся у меня в базе такая дата:
Wed Mar 29 12:32:00 2006
далее я выбираю диапазон дат и делаю сэлэкт всех дат базы,которые попадают в этот диапазон, как мне при этом отрезать минуты и секунды от обеих дат, чтобы сэлэкт брался только по дню месяцу и году, вроде трунк нужно использовать, но тогда дате нужно делать ту_чарт, или может я ошибаюсь, в sql сервере есть функция convert а в оракле как ее звать?
спасибо еще раз Денис
...
Рейтинг: 0 / 0
29.03.2006, 17:30
    #33633246
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в запросе
В Оракле есть фунция TRUNC() . Заодно можно упомянуть, что java.sql.Date обрезает часы, так что при его использовании неявно будешь работать с целыми днями.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка в запросе / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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