1

Javaが私のdoubleを指数値に変えるのを防ぐ方法はありますか? それをデータベースに保存するのに問題があります。VarChar を数値に変換できないと言い続けます。

そうです;

amt = oldAmt - amt;
amt = Math.abs(amt);

そして、セッターを使用して、そのようにamtに値を入れます。

jvd.setDr_amt(amt);

次に、関数を使用してクエリ文字列を生成すると、次のようになります。

INSERT INTO jv ( id, dr_amt) VALUES (1, 1.595545786E7);

dr_amt のデータベースのデータ型は数値 (15, 2)です。

誰?

4

2 に答える 2

7

私はあなたがこのようなことをしていると非常に推測しています:

connection.createStatement().executeUpdate(
  "INSERT INTO my_table VALUES('" + myDouble + "')");

次の理由でこれを行わないでください。

  • 文字列を連結すると、構文エラーが発生します
  • 文字列を連結するとSQLインジェクションが発生します

JDBCがデータ型を処理できるようにステートメントを記述します。

PreparedStatement stmt = connection.prepareStatement(
  "INSERT INTO my_table VALUES(?)");
stmt.setDouble(1, myDouble);
stmt.executeUpdate();

バインド値を使用する代わりにSQL文字列にdouble値をインライン化する必要がある場合は、代わりにを使用BigDecimalしてdoubleをシリアル化してみてください。

new BigDecimal(myDouble).toString();

あなたは金銭的価値を操作しているように見えるので、SQLのデータ型に対するJavaの最適な一致とBigDecimal同様に、とにかくすべてのdoubleを変更する必要がありますBigDecimalDECIMAL

于 2012-07-12T09:47:31.063 に答える
4

バインドされたパラメータを使用して、JDBCプリペアドステートメントを使用する必要があります。

PreparedStatement s = c.prepareStatement(
        "INSERT INTO mytable (myfield) VALUES (?)");
s.setDouble(1, n);
s.executeUpdate();

【例外処理コード省略】

JDBCレイヤーは、double変数がマングルされることなくデータベースサーバーに正しく送信されることを保証します。

于 2012-07-12T09:47:07.293 に答える