Из базы данных не возвращена строка, но есть записи, которые нужно вернуть.

Я выполняю оператор 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()){
    ........
}
7
задан masay 29 March 2012 в 12:41
поделиться