0

以下は、Prepared ステートメントで処理しようとしているクエリです。AmountOnHand と ReorderPointAmt のデータ型は Decimal です。

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

しかし、なぜ Query:2 が例外になってしまったのか理解できませんでした。java.sql.PreparedStatement.setObject(index, Object)Query:2 の値を入力するために使用しています。

メソッドにDouble& FloatObject を設定してみました。setObjectまだ問題に直面しています。

4

1 に答える 1

0

java.sql.PreparedStatement.setString(index, "String value")or のような適切なデータ型を使用setInt()するsetDouble()

于 2013-10-17T08:12:47.450 に答える