开发者社区> 问答> 正文

如果jdbc批处理出现问题数据,可以产生问题数据的错误行及错误原因吗??报错

这段时间一直在做批量数据更新插入的工作,一开始我理所当然地使用批处理的方式处理数据。

但后来发现,批处理速度虽然相对快不少,但一旦数据中出现问题数据,我完全不知道怎么调,console只会提示批处理出错,但到底哪儿错了却一声不吭,很是可恶。

最后我的做法是先进行批处理,如果有问题数据导致批处理报错,就回滚,然后进行单记录单事务提交。好处是可以记录所有错误数据的错误信息,坏处当然就是效率太…………

我希望可以从批处理阶段,jdbc就能告诉我哪些个数据有问题,并且各自的问题是什么。

所以,想问下大家,还有更好的处理办法兼顾效率和错误提示吗?或者请分享一下,大家平时是怎么处理这样的问题的?

ps: 

1. 数据本身我不可控制,难以从源头上消灭问题数据。

展开
收起
爱吃鱼的程序员 2020-06-12 14:14:57 770 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    可以使用基于事务的批量insert,效率也会很好。我说的批量不是addBatch这些,而是先开启一个事务,然后一次insert只去插入一条,而插入很多条后去commit这个事务。为什么:默认情况下,一个insert是一个事务,每个事务都会写日志。通过减少写日志的次数,速度可以提升很多。

    伪代码:
    <preclass="brush:java;toolbar:true;auto-links:false;">starttransaction;foreachdata{try:insert(data)catch:printdata+"插入失败"}commit;





    请问问题数据是怎样导致问题的?使用的insertsql长什么样子?数据、以及问题数据长什么样子?问题数据是不是可以不要?可能我表达不够清晰,这里想向大家学习的是如何在兼顾效率的情况下获得详细的错误信息,而非如何解决问题数据。请问问题数据是怎样导致问题的?值长度过界(然后我会扩充长度)使用的insertsql长什么样子?insertintotb_name(...)values(...)数据、以及问题数据长什么样子?问题数据是不是可以不要?这两个问题没有关系,我想要的是错误提示而非如何解决数据问题。

    2020-06-12 14:15:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载