【发布时间】:2015-11-26 20:29:21
【问题描述】:
假设我们有一个带有NUMERIC(5,2) 的表,并且我们将123 插入为BigDecimal。
当我们选择返回值时 - 它应该是123(我们插入它时)还是123.00?
我在其中一个项目中从 HSQLDB 1.8.0.10 迁移到 2.3.3 时遇到了这个问题。
在 1.8.0.10 中,我得到了插入值的比例(123 表示插入的 123)。
在 2.3.3 中,无论如何我都会获得列的比例(123.00 用于插入的 123)。
我有reported this as a bug,但得到以下回复:
但 NUMERIC(5,2) 意味着无论您插入什么,总有 2 个小数位。 1.8 版没有遵循 SQL 标准定义。
我不知道这是否正确,但对我来说似乎不合逻辑。
我们真的应该在小数部分得到这些零,“无论如何”?
这是我的测试用例:
Connection conn = DriverManager.getConnection(...);
Statement stmt = conn.createStatement();
stmt.executeUpdate("create table test (value NUMERIC(5,2));");
String sql = "INSERT INTO test (value) VALUES(?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setBigDecimal(1, BigDecimal.ONE);
pstmt.executeUpdate();
ResultSet rs = stmt.executeQuery("SELECT * FROM test");
while (rs.next()) {
Assert.assertEquals(BigDecimal.ONE, rs.getBigDecimal(1));
}
rs.close();
stmt.close();
conn.close();
【问题讨论】:
-
响应正确,基于标准 SQL 定义为
NUMERIC(5,2)的列应始终返回两位小数。 -
@dnoeth 你有这方面的参考吗?
标签: java sql jdbc hsqldb bigdecimal