有没有阻止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的数据类型为数字(15,2)
任何?
答案 0 :(得分:7)
我非常猜测你做了这样的事情:
connection.createStatement().executeUpdate(
"INSERT INTO my_table VALUES('" + myDouble + "')");
出于以下原因不要这样做:
以让JDBC处理数据类型的方式编写语句:
PreparedStatement stmt = connection.prepareStatement(
"INSERT INTO my_table VALUES(?)");
stmt.setDouble(1, myDouble);
stmt.executeUpdate();
如果您绝对必须在SQL字符串中内联您的double值而不是使用绑定值,请尝试使用BigDecimal
来序列化double,而不是:
new BigDecimal(myDouble).toString();
由于您似乎在操作货币值,因此您应该将所有双打更改为BigDecimal
,因为BigDecimal
是Java的DECIMAL
数据类型的最佳匹配
答案 1 :(得分:4)
你应该使用带有绑定参数的JDBC 预备语句,例如
PreparedStatement s = c.prepareStatement(
"INSERT INTO mytable (myfield) VALUES (?)");
s.setDouble(1, n);
s.executeUpdate();
[省略异常处理代码]
JDBC层将确保您的双变量正确发送到数据库服务器而不会受到损坏。