我正在運行在Websphere容器中的基於Java的Web應用程序運行查詢。 這個查詢然而,作爲相當簡單,失敗,怪異erorr如下:奇怪的DB2數據庫問題:Websphere Connection Pooling
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R com.ibm.db2.jcc.b.zd: Invalid data conversion:Requested conversion would result in a loss of precision of 40000
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.q.a(q.java:137)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.q.a(q.java:1189)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.a(ad.java:1217)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.kb(ad.java:2977)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.d(ad.java:1970)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.d(ad.java:2342)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.U(ad.java:489)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.executeQuery(ad.java:472)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery(WSJdbcPreparedStatement.java:559)
該查詢是很簡單:它很簡單,只要
select field1, field2 from <xyz table> where <xyz_pk> = ?
主鍵是一個INTEGER(4- ),並且數據的值高達99999999.但是,當我運行此查詢時,我的web應用程序在從websphere連接池獲取的連接中運行 ,但它開始因pk值大於35k +而失敗。在jdbc綁定代碼中,我嘗試了一個preparedStatement.setInt()和preparedStatement.setFloat()。但似乎沒有任何工作!它只適用於低於35k +的任何事物,並且在所有情況下都會失敗。
Java的int大小遠遠大於35k +,那麼爲什麼這個查詢會失敗並出現此錯誤?這發生在我的應用程序中,當我使用我選擇的數據庫客戶端嘗試相同的查詢時,正在爲pkey的所有值獲得正確的結果!
以前有沒有人遇到過這個問題?如果是的話,你是如何解決它的?
您能否提供一些示例Java代碼和完整的堆棧跟蹤,以瞭解您使用PreparedStatement.setInt()的情況? java.sql中沒有類位於堆棧跟蹤中。 – NamshubWriter 2009-07-15 14:45:37