【问题标题】:Verifying success for spring JDBC batch update验证 Spring JDBC 批量更新是否成功
【发布时间】:2013-10-14 01:53:00
【问题描述】:

我正在使用 Spring JDBCTemplate batchUpdate 批量插入数据。我想验证数据是否插入成功。 JDBCTemplate batchUpdate返回一个int[][],那么验证数据插入的正确方法是什么?

这个link 说“所有批处理更新方法都返回一个 int 数组,其中包含每个批处理条目的受影响行数。此计数由 JDBC 驱动程序报告,它并不总是可用,在这种情况下 JDBC 驱动程序只返回一个-2 值”。我无法理解在这里返回 -2 值的意义。是否意味着插入不成功?

【问题讨论】:

    标签: java jdbc spring-jdbc batch-updates


    【解决方案1】:

    -2不一定表示错误,可能如前所述,受影响行数的情况不可用。

    编辑

    -2 是 Statement.SUCCESS_NO_INFO 的值(而 EXECUTE_FAILED 是 -3)。因此,除非驱动程序不符合 JDBC 规范,否则 -2 明确表示成功

    编辑结束

    错误通过BatchUpdateException报告

    通常,如果您在批处理脚本中运行 N 个查询,您将在结果中获得每个查询 i 的更新计数:

    int result[] = jdbcTemplate.batchUpdate(sql);
    

    所以:

    result[0]
    

    将保存第一个查询的更新计数,

    result[1]
    

    将保存第二个查询等的更新计数。

    【讨论】:

    • 那么这是否意味着即使我得到-2,该查询的插入也可能成功?
    • 可能值得一提的是-2Statement.SUCCESS_NO_INFO 的值(而EXECUTE_FAILED-3)。因此,除非驱动程序不符合 JDBC 规范,否则-2 明确表示成功。
    • @Mark Rotteveel,感谢您的评论。添加到答案中。
    • 我想不出批处理结果是-3 并且没有抛出异常的场景。但请记住,驱动程序可能决定在异常后继续执行批处理(并在完成后抛出所有收到的异常),或者立即放弃(不执行批处理的其余部分)。所以当你遇到-3时,并不一定意味着该批次的下一个元素也失败了。
    • @DharmvirTiwari 禁用自动提交和异常回滚。一些驱动程序在第一个错误时停止,一些驱动程序将继续。这无法配置(除非可能以特定于驱动程序的方式,但不知道示例)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2023-03-18
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多