gpt4 book ai didi

sql-server - 如何插入到 SQL Server 小数列?

转载 作者:行者123 更新时间:2023-12-03 21:00:24 24 4
gpt4 key购买 nike

我正在为 SQL Server 使用 MS JDBC 驱动程序,并尝试将值插入 decimal(18,5) 列。文档说 decimal 列映射到 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 转换为十进制时出错。

司机似乎对 double 很满意,所以我可以这样做:

ps.setObject(1, 3.14);

如果我需要 BigDecimal 提供的额外精度,我该如何进行插入?

更新:当然,如果我要插入 3.14,我就不必担心这个。如果我想插入一个实际需要小数精度的值怎么办?例如,小数点后 30 位?

最佳答案

事实证明这根本不是数据库问题。从 varchar 转换的错误基本上是说该值不适合 DB 字段。一定是将命令中发送的字符串转换为十进制值。

问题实际上是 new BigDecimal(3.14) 创建了一个 BigDecimal,其值类似于 3.140000000003457234987。这是因为 double 无法准确存储 3.14。然后当这个值被发送到数据库时,它不会接受它,因为该列只有五位小数。修复方法是使用 BigDecimal 的另一个构造函数:new BigDecimal("3.14")。这将恰好保持 3.14。

关于sql-server - 如何插入到 SQL Server 小数列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com