小编典典

Oracle JDBC:双倍下溢

java

当尝试将双精度型插入到Oracle表的 DOUBLE PRECISION
列中时,当双精度型超出范围时(在我的情况下:太小),我得到一个异常,但是只有在使用时PreparedStatement(如果我使用normal
Statement,它会四舍五入)到0)。

表:

create table test
(
  VALUE DOUBLE PRECISION
);

Java代码:

double d = 1e-234;

// using Statement works, the number gets rounded and 0 is inserted
try (Statement stmt = conn.createStatement()) {
    stmt.executeUpdate("insert into test values (" + d + ")");
}

// using PreparedStatement fails, throws an IllegalArgumentException: Underflow
try (PreparedStatement stmt = conn.prepareStatement("insert into test values (?)")) {
    stmt.setDouble(1, d);
    stmt.executeUpdate();
}
  • 在插入/更新语句中使用双打之前,是否必须检查并四舍五入?
  • 我可以以某种方式自动将值取整吗?

感谢您的任何见解/提示。


阅读 183

收藏
2020-11-26

共1个答案

小编典典

DOUBLE PRECISION= FLOAT(126)如您在评论中指出的。

使用BINARY_DOUBLE数据类型具有与Java相同的精度Double

参考:

2020-11-26