2013-10-17 31 views
0

以下是我正在嘗試在Prepared語句中處理的查詢。其中AmountOnHand & ReorderPointAmt是數據類型Decimal。使用setObject方法時的算術溢出或其他算術異常

Query 1: SELECT AmountOnHand FROM TableA WHERE AmountOnHand <= (ReorderPointAmt*56.0/100); 

凡56.0是一個動態值。

所以我更新了查詢,如下

Query 2: SELECT AmountOnHand FROM TableA WHERE AmountOnHand <= (ReorderPointAmt*?); 

但在執行此查詢,我發現了以下異常:

Arithmetic overflow or other arithmetic exception occurred.. SQLCODE=-802, SQLSTATE=22003, DRIVER=4.15.82. 

我能夠通過更新來解決此問題像下面的查詢

Query 3: SELECT AmountOnHand FROM TableA WHERE AmountOnHand <= (ReorderPointAmt * CAST(? AS DECIMAL)); 

但我不明白是什麼使查詢:2最終在異常。我正在使用java.sql.PreparedStatement.setObject(index, Object)來提供Query:2的值。

我試過設置Double & Float對象setObject方法。仍然面臨這個問題。

+0

任何適當的數據類型,你能嘗試使用'java.sql.PreparedStatement.setDouble' – anubhava

+0

問題是java.sql.PreparedStatement.setObject(..)自帶的框架。我不想編輯它。 – Eddy

+0

你確定'ReorderPointAmt'是'Decimal'嗎? –

回答

0

使用像java.sql.PreparedStatement.setString(index, "String value")setInt()setDouble()

+0

問題是java.sql.PreparedStatement.setObject(..)隨框架一起提供。我不想編輯它。 – Eddy