Я выполняю оператор 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, вот код (добавлен в 2012-03-29)
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()){
........
}