Tim*_*imK 3 sql-server jdbc bigdecimal
我正在使用SQL Server的MS JDBC驱动程序,并尝试将值插入到十进制(18,5)列中.文档说十进制列映射到BigDecimal,所以我试图这样做:
PreparedStatement ps = conn.prepareStatement("INSERT INTO [dbo].[AllTypesTable] ([decimal18_0Col]) VALUES (?)");
ps.setObject(1, new BigDecimal(3.14));
ps.execute();
Run Code Online (Sandbox Code Playgroud)
在调用execute()时,我收到此错误:
com.microsoft.sqlserver.jdbc.SQLServerException:将数据类型nvarchar转换为十进制时出错.
司机似乎对双打很满意,所以我可以这样做:
ps.setObject(1, 3.14);
Run Code Online (Sandbox Code Playgroud)
如果我需要BigDecimal给我的额外精度,我怎么能插入?
更新:如果我要插入3.14,我当然不必担心这个问题.如果我想插入实际需要小数精度的值,该怎么办?例如,有小数点后30位的东西?
事实证明,这根本不是数据库问题.关于从varchar转换的错误基本上是说该值不适合DB字段.它必须从命令中发送的字符串转换为十进制值.
问题实际上是新的BigDecimal(3.14)创建了一个类似3.140000000003457234987的BigDecimal.这是因为double不能精确存储3.14.然后,当该值发送到DB时,它将不会接受它,因为该列只有五个小数位.修复是使用BigDecimal的另一个构造函数:new BigDecimal("3.14").这将完全保持3.14.
| 归档时间: |
|
| 查看次数: |
7365 次 |
| 最近记录: |