当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《机器学习》—— PCA降维
  • ios xib 子控件约束置灰不能添加约束
  • 我发的共同一作,到底有没有用?
  • vue3 自定义指令 directive
  • 项目管理:如何确保目标的实现?
  • 基于SpringBoot+Vue+MySQL的垃圾分类回收管理系统
  • 二层交换机和三层交换机的优缺点
  • 【LoRA】浅谈大模型微调之LoRA技术
  • 快速了解高并发解决方案
  • 如何在Oracle中实现数据的加密
  • 基于飞桨paddle2.6.1+cuda11.7+paddleRS开发版的目标提取-道路数据集训练和预测代码
  • 安卓开发中LiveData的使用
  • 算法41:位1的个数
  • 【人工智能学习笔记】4_1 深度学习基础之深度学习概述
  • 数据同步-Mysql同步到ElasticSearch
  • 【Leetcode】101. 对称二叉树
  • Consul Config 使用Git做版本控制的实现
  • co模块的前端实现
  • Django 博客开发教程 16 - 统计文章阅读量
  • Docker下部署自己的LNMP工作环境
  • JavaScript HTML DOM
  • JS函数式编程 数组部分风格 ES6版
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mysql 5.6 原生Online DDL解析
  • python 学习笔记 - Queue Pipes,进程间通讯
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • TCP拥塞控制
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 从伪并行的 Python 多线程说起
  • 分布式任务队列Celery
  • 分布式熔断降级平台aegis
  • 正则与JS中的正则
  • 自制字幕遮挡器
  • 最近的计划
  • Nginx实现动静分离
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #### go map 底层结构 ####
  • #HarmonyOS:基础语法
  • #laravel 通过手动安装依赖PHPExcel#
  • #pragma 指令
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (Java入门)学生管理系统
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)计算机毕业设计ssm电影分享网站
  • (黑马点评)二、短信登录功能实现
  • (力扣题库)跳跃游戏II(c++)
  • (十八)三元表达式和列表解析
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)u-boot-nand.bin的下载
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • /var/lib/dpkg/lock 锁定问题
  • ;号自动换行
  • @PreAuthorize与@Secured注解的区别是什么?
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹