当尝试将双精度型插入到Oracle表的 DOUBLE PRECISION 列中时,当双精度型超出范围时(在我的情况下:太小),我得到一个异常,但是只有在使用时PreparedStatement(如果我使用normal Statement,它会四舍五入)到0)。
PreparedStatement
Statement
表:
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(); }
感谢您的任何见解/提示。
DOUBLE PRECISION= FLOAT(126)如您在评论中指出的。
DOUBLE PRECISION
FLOAT(126)
使用BINARY_DOUBLE数据类型具有与Java相同的精度Double。
BINARY_DOUBLE
Double
参考: