2012-03-23 4 views
6

Я выполняю инструкцию select с помощью драйвера jdbc sybase (jconn3). Я проверил оператор, выполнив вручную на isql, и все строки вернулись правильно. В заявлении, которое выполняется на JDBC:Нет строки, возвращаемой из db - но есть записи, которые необходимо вернуть

select * from mytable where date between ? and ? 

Я добавил DateFormat в yyyy-MM-dd HH:mm:ss и установите значение времени в 00:00:00 на дату и 23:59:59 на дату окончания начать.

Не работает. Счетчик строк должен быть 1000, но иногда это 770, иногда 990, иногда 564 и т. Д. Нет никакого определенного количества строк, которое возвращалось каждый раз.

После этого я добавил дополнительное выполнение, которое возвращает только количество строк. Сначала я выполняю инструкцию select count(*) from ..., а затем выполняет select * from .... и теперь `select * from ... query возвращает правильное количество записей каждый раз. Это не может быть связано с кешированием. И что странно, я использую то же самое, что и готовые объекты и объекты результатов для этих двух исполнений.

Любая идея по этому вопросу?

@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()){ 
    ........ 
} 
+1

Покажите нам свой код. – Goibniu

+0

@ Rulmeq, я добавил код, о котором идет речь. – Aykut

+1

Можете ли вы включить в свой код свой экземпляр (определение) beginDate и endDate. Они, кажется, являются ключевыми здесь. –

ответ

0

Спасибо за все, но проблема была решена, и она не была связана с jdbc. Это связано с использованием System.currentTimeMillis() и хост-системы слишком быстро. Вот почему система когда-то использует одни и те же ms. Я изменил ссылки.

2

То, что я думаю, что проблема заключается в коде, который вы используете для присвоения значений даты и времени для аргументов запроса. А теперь, как вы указали, что код с «выберите * из ...» работает нормально, так что я думаю, что единственное различие между ними состоит в том, что вы можете использовать

ps = myConn.getConnection().prepareStatement("select Count(*) from myTable where date between ? and ?"); 
ps.setTimestamp(1, new java.sql.Timestamp(beginDate.getTime())); 
ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime())); 
rs = ps.executeQuery(); 

для «SELECT COUNT (*) с. . "

+0

@Shanbaz, это не решение, но вы хорошо проанализировали его. Спасибо. – Aykut

0

В функции Oracle TO_DATE будет показано, как показано ниже.

"select count(*) from myTable where date between TO_DATE(?, 'yyyy-mm-dd') and TO_DATE(?, 'yyyy-mm-dd')" 
+0

Thx, но мы используем sybase ase – Aykut

1

Дата, дата и время, smalldatetime или timestamp в myTable? Вы используете setDate и setTimestamp. Один из них не соответствует типу даты, определенному в myTable.

 Смежные вопросы

  • Нет связанных вопросов^_^