1

有没有办法阻止Java把我的双倍变成指数值?我无法将其保存到我的数据库中。它一直告诉我它无法将我的 VarChar 转换为数字。

我愿意;

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

并使用 setter将值放入amt中;

jvd.setDr_amt(amt);

然后使用一个函数生成一个查询字符串,它给了我;

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

dr_amt 的数据库中的数据类型是numeric(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 字符串中内联您的双精度值而不是使用绑定值,请尝试使用BigDecimal来序列化您的双精度值,而不是:

new BigDecimal(myDouble).toString();

由于您似乎在操作货币值,因此您应该将所有双打都更改为BigDecimal无论如何, Java 与 SQL数据类型BigDecimal的最佳匹配也是如此DECIMAL

于 2012-07-12T09:47:31.063 回答
4

您应该使用带有绑定参数的 JDBC准备语句,例如

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

[省略异常处理代码]

JDBC 层将确保您的双变量正确地发送到数据库服务器而不会被破坏。

于 2012-07-12T09:47:07.293 回答