有没有办法阻止Java将我的双精度转换为指数值?

Rab*_*bin 1 java jdbc

反正有没有阻止Java将我的双重转化为指数值?我有问题将其保存到我的数据库中.它一直告诉我它无法将我的VarChar转换为数字.

我做;

amt = oldAmt - amt;
amt = Math.abs(amt);
Run Code Online (Sandbox Code Playgroud)

并使用setter 将值放入amt中 ;

jvd.setDr_amt(amt);
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO jv ( id, dr_amt) VALUES (1, 1.595545786E7);
Run Code Online (Sandbox Code Playgroud)

dr_amt数据库中的数据类型是数字( 15,2 )

任何人?

Luk*_*der 7

我非常猜测你做了这样的事情:

connection.createStatement().executeUpdate(
  "INSERT INTO my_table VALUES('" + myDouble + "')");
Run Code Online (Sandbox Code Playgroud)

不要这样做,原因如下:

  • 连接字符串将导致语法错误
  • 连接字符串将导致SQL注入

以让JDBC处理数据类型的方式编写语句:

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

如果您绝对必须在SQL字符串中内联您的double值而不是使用绑定值,请尝试使用BigDecimal序列化double,而不是:

new BigDecimal(myDouble).toString();
Run Code Online (Sandbox Code Playgroud)

由于您似乎在使用货币值进行操作,因此您应该将所有双打更改为BigDecimal,因为BigDecimalJava是SQL DECIMAL数据类型的最佳匹配