2011-10-25 38 views
1

我有查詢:錯誤的結果與SQL Server的PreparedStatement在Java中

select * from db where timeColumn >= ? 

然後我用準備語句:

PreparedStatement statement = connection.prepareStatement(sql); 
statement.setDate(index, new java.sql.Date(((Date) param).getTime())); 

隨着微軟驅動的結果不正確,的resultSet包含從白天開始行,忽略要求的小時/分鐘等。

怎麼了?

回答

4

結果正確:您正在使用setDate()和僅包含年月日的java.sql.Date,而不是setTimestamp()和java.sql.Timestamp,其中還包含時間部分

例如:

新的java.sql.Timestamp(新java.util.Date()的getTime()。)

0

答案來自Javadoc文檔java.sql.Date

要符合德通過在與實例相關聯的特定時區中將小時,分鐘,秒和012毫秒設置爲零,必須將java.sql.Date實例包裝的毫秒值「歸一化」。

換句話說,java.sql.Date將有小時,分鐘和秒字段,但它們將始終設置爲零。

您應該改用java.sql.Timestamp

+0

是的,你的權利! – IronBCC

0

嘗試使用 statement.setTimestamp(index, new java.sql.Timestamp(((Date) param).getTime()));