2012-03-23 22 views
6

jdbc sybaseドライバ(jconn3)を使用してselect文を実行しています。 isqlで手動で実行された文をチェックし、すべての行が正しく返されました。 JDBCの上で実行されている声明:dbから返された行はありませんが、返されるレコードがあります

select * from mytable where date between ? and ? 

は私がyyyy-MM-dd HH:mm:ssとしてDATEFORMATを追加し、夜12時00分00秒として時間値を設定するための終了日の日付と午後11時59分59秒を開始します。

動作しません。行数は1000でなければならないが、時には770、場合によっては990、時には564などである。毎回返される特定の行数はない。

その後、行カウントだけを返す余分な実行を追加しました。最初にselect count(*) from ...文を実行してからselect * from ....を実行して、今度は `select * from ... queryは正しい数のレコードを毎回返します。これはキャッシュと関連付けることはできません。そして、奇妙なことですが、私はそれらの2つの実行のために同じpreparedstatementとresultsetオブジェクトを使用しています。

その問題に関するご意見はありますか?

@Rulmeqは、ここでのコード(2012年3月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

は、私はこの問題は、クエリの引数にdatetime値を割り当てるために使用しているコードと思われるものです。そして今、あなたは「... SELECT * FROM」とのコードがあること指定正常に動作しているので、私はあなたがSELECT COUNT(*)FROM」のために

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(); 

を使用することができ、それらの間の唯一の違いはあると思いますよう。 "

+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

日付は、myTableのdate、datetime、smalldatetimeまたはtimestampとして定義されていますか?あなたはsetDateとsetTimestampを使用しています。そのうちの1つがmyTableで定義された日付の種類と一致しません。

関連する問題