【发布时间】:2012-04-10 13:39:04
【问题描述】:
我正在使用 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();
在调用 execute() 时,我收到此错误:
com.microsoft.sqlserver.jdbc.SQLServerException:将数据类型 nvarchar 转换为十进制时出错。
司机似乎对双打很满意,所以我可以这样做:
ps.setObject(1, 3.14);
如果我需要 BigDecimal 提供的额外精度,我该如何进行插入?
更新:如果我要插入 3.14,我当然不必担心这一点。如果我想插入一个实际需要小数精度的值怎么办?例如,小数点后 30 位?
【问题讨论】:
-
如果你改用 setBigDecimal 会发生什么?顺便说一句:这显然是一个错误,JDBC 标准(JDBC 4.1,附录 B)明确规定 JDBC 驱动程序必须接受 BigDecimal 数字字段、位、布尔值、char、varchar 和 longvarchar。
标签: sql-server jdbc bigdecimal