当前位置: 首页 > news >正文

批量插入insert到SQLServer数据库,BigDecimal精度丢失解决办法,不动代码,从驱动层面解决

概述

相信很多人都遇到过,使用sql server数据库,批量插入数据时,BigDecimal类型出现丢失精度的问题,网上也有很多人给出过解决方案,但一般都要修改应用代码,不推荐。

丢失精度的本质是官方的驱动有BUG造成的,下面直接给出解决方案,不用修改任何代码。一共分两步:

一、升级驱动到v12.6.x以上版本

驱动版本一览:https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc

注意:请选择对应的jdk版本。

我使用的版本如下:

<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.8.1.jre11</version>
</dependency>


问:为什么要升级到v12.6.x以上版本呢?

答:v12.6.x之后官方驱动增加了一个calcBigDecimalPrecision属性,用于配置精度

官方说明链接:设置连接属性 - JDBC Driver for SQL Server | Microsoft Learn

说明如下:

二、修改驱动字符串配置

在驱动串中加入calcBigDecimalPrecision=true

注意,取值要修改为true。

示例:

jdbc:sqlserver://127.0.0.1:1234;DatabaseName=ABCDB;encrypt=false;calcBigDecimalPrecision=true;

总结

经过以上两步,即可在不修改应用代码的情况下,解决精度丢失的问题。

参考文章

1)这篇文章非常好,讲明白了精度丢失的因果,推荐阅读:当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!-腾讯云开发者社区-腾讯云

2)驱动字符串配置大全(微软官方):设置连接属性 - JDBC Driver for SQL Server | Microsoft Learn

3)各版本Release说明(微软官方):发行说明 - JDBC Driver for SQL Server | Microsoft Learn


http://www.mrgr.cn/news/25404.html

相关文章:

  • 干部画像系统是什么?
  • 卫生间漏水原因很多,切莫病急乱投医
  • 直播电商平台如何合理分账给供应商/主播
  • 基于SpringBoot的准妈妈孕期交流平台
  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调-unsloth(让微调起飞)-单机单卡-V100(十六)
  • Vue3使用Websocket进行跨页面通信
  • Vue路由的分类与使用
  • 缓存预热/雪崩/穿透/击穿
  • 牛客小白月赛99(下)
  • Shell脚本-拆分文件并重命名(性能测试)
  • 记一次幸运的漏洞挖掘
  • 植物三萜皂苷生物合成途径及调控机制研究进展-文献精读48
  • 【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
  • Linux和C语言(Day 12)
  • java基于PDF底层内容流的解析对文本内容进行编辑
  • Arduino 2线串行 通信 驱动 LCD 12864
  • 尚硅谷的尚乐代驾项目
  • 【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译第十四章非设备树Android4.4系统编译
  • Git 提取和拉取的区别在哪
  • 算法:数字化系统的智慧核心