Я выполняю оператор select с использованием драйвера jdbc sybase (jconn3
). Я проверил оператор, выполненный вручную на isql, и все строки вернулись правильно. Оператор, который выполняется на jdbc:
select * from mytable where date between ? and ?
Я добавил формат даты как yyyy-MM-dd HH:mm:ss
и установил значение времени как 00:00:00 для даты начала и 23:59. :59 для даты окончания.
Это не работает. Количество строк должно быть 1000, но иногда оно равно 770, иногда 990, иногда 564 и т. д. Нет определенного количества строк, которое каждый раз возвращается.
После этого я добавил дополнительное выполнение, которое возвращает только количество строк. Сначала я выполняю оператор select count(*) from...
, затем выполняю select * from....
и теперь `select * from... запрос возвращает правильное число записей каждый раз. Это не может быть связано с кэшированием. И странно то, что я использую одни и те же подготовленные объекты и объекты набора результатов для этих двух исполнений.
Есть идеи по этому поводу?
@Rulmeq, вот код (добавлен 29 марта 2012 г.)
ResultSet rs = null;
PreparedStatement ps = null;
ps = myConn.getConnection().prepareStatement("select count(*) from myTable where date between ? and ?");
ps.setDate(1, new java.sql.Date(beginDate.getTime())); // format : yyyy-MM-dd
ps.setDate(2, new java.sql.Date(endDate.getTime())); // format : yyyy-MM-dd
rs = ps.executeQuery();
rs.next();
// some logs here
ps = myConn.getConnection().prepareStatement("select * from myTable where date between ? and ?");
ps.setTimestamp(1, new java.sql.Timestamp(beginDate.getTime())); // format : yyyy-MM-dd hh:mm:ss
ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime())); // format : yyyy-MM-dd hh:mm:ss
rs = ps.executeQuery();
while(rs.next()){
........
}