开发者社区> 问答> 正文

关于 Db类中的批处理batch操作:报错

@JFinal 波哥你好,我有个小小的建议,希望能考虑一下,是关于 Db类中的批处理batch操作的。

从我个人而言,我使用最多就是读取文件的中的数据,进行批量入库 (oracle数据库),其中有个问题就是当我们更新或删除不存在的数据时,数据库并不会报错,但是为了保证数据能够尽可能的入库,我就必须要知道当前批量操作到底成功了多少条,把未能成功update的数据,再次进行insert操作。而根据jfinal的 Db 类 对batch的封装,原汁原味的返回了一个int类型的数组,但是我个人觉得这个数组中的数据并无多大意义,特别地,不能统计出当前批处理操作到底成功了多少条,而通过PreparedStatement 对象的 getUpdateCount()方法却能获得每次批量提交时对数据库真实的影响条数(即 成功了多少条)。

So I have a dream ,我希望JFinal的Db类能够通过某种途径,返回批量操作对数据库的真实影响条数.

展开
收起
kun坤 2020-06-06 16:02:33 662 0
1 条回答
写回答
取消 提交回答
  •     我会好好思考这个问题,看是否能把此功能在下一版本实现,或许传个int[] updateCount参数进去就可以  

    ######

        测试了一下PreparedStatement 对象的 getUpdateCount()方法只能得到最后一条sql的更新数量,所以当addBatch(...)超过一条时getUpdateCount()得到的数据没有意义了。

        要得到更新总数需要对目前int[] 返回值做个累加。所以目前能想到的解决方案:

    1:改变返回值,将 int[] 进行累加并返回 long

    2:添加 long[]  updateCount形参,将累加值存入此变量

    如果采用方案一,那么开发者万一要去拿int[]就不方便了。或许可以采用方案二,但如果保持现状,开发者可以通过一个简单的循环达到此目的:

    int[] result = Db.batch(...);
    long updateCounter = 0;
    for (int i : result)
      updateCount += i;

    是否要要用添加 long[] updateCounter需要再权衡一下,主要为是考虑简洁 :)

    ######

    引用来自“JFinal”的答案

        测试了一下PreparedStatement 对象的 getUpdateCount()方法只能得到最后一条sql的更新数量,所以当addBatch(...)超过一条时getUpdateCount()得到的数据没有意义了。

        要得到更新总数需要对目前int[] 返回值做个累加。所以目前能想到的解决方案:

    1:改变返回值,将 int[] 进行累加并返回 long

    2:添加 long[]  updateCount形参,将累加值存入此变量

    如果采用方案一,那么开发者万一要去拿int[]就不方便了。或许可以采用方案二,但如果保持现状,开发者可以通过一个简单的循环达到此目的:

    int[] result = Db.batch(...);
    long updateCounter = 0;
    for (int i : result)
      updateCount += i;

    是否要要用添加 long[] updateCounter需要再权衡一下,主要为是考虑简洁 :)

    这个对于oracle是不对的,oracle对executeBatch并不完全支持,总是返回-2 ,所以不能用累加
    ######回复 @JFinal : 成功时肯定返回 1 ,不成功也不抛错时就是负数了,还真不一定是 -2######oracle 下如何在 executeBatch() 后得到 updateCounter? 如果老返回 -2,这个功能貌似不好实现了 :)######因为我用的最多是针对单挑sql + batch , 所以用  getUpdateCount() 获取每次执行的返回值,再进行累加,没考虑到多条sql的情况。 看来针对 oracle又要搞个特殊情况了!!######多条的确是不方便了,你那要有有好方案,记得分享一下 :)
    2020-06-06 16:02:55
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spark SQL 2.0/2.1 Experiences using TPC-DS 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载