【问题标题】:Batch Update fails - Rollback operation批量更新失败 - 回滚操作
【发布时间】:2010-07-27 07:18:38
【问题描述】:

我创建了一个 PreparedStatement 并在批处理中添加了一些数据

PreparedStatement ps = conn.PreparedStatement("INSERT into table (a, b) values (?, ?)";

ps.setInt(1, 1);
ps.setInt(2, 2);

ps.addBatch

ps.setInt(1, 4);
ps.setInt(2, 5);

ps.addBatch

现在当我执行 ps.我得到结果,现在假设 ps 失败,然后我要插入记录,不是在批处理模式下。

我如何提取准备好的语句,我可以得到大小,但不确定如何获取记录?

【问题讨论】:

    标签: java mysql prepared-statement


    【解决方案1】:

    你不能一开始就一个一个地插入记录吗?如果您的 DBMS 支持事务 - 大多数现代的都支持 - 您可以将所有插入捆绑到一个原子事务中,并且对于数据库的其他用户来说,它看起来就像您一次添加它们一样(参见下面的伪代码)。

    connection.setAutoCommit(false);
    try{
        insert(1,2);
    }
    catch(Exception e){
        System.out.println("1, 2 didn't work");
    }
    try{
        insert(4,5);
    }
    catch(Exception e){
        System.out.println("4, 5 didn't work");
    }
    connection.commit();
    

    【讨论】:

    • 其实要求是,如果批量更新失败,那么我需要一个一个地插入记录并捕获该特定记录的异常。
    • 您仍然可以这样做 - 只需将 e 分配给一个变量并保留它而不是打印一条消息(并在循环中执行它,而不是按顺序编写所有内容)。如果您想停止异常,请不要在循环中捕获它。我不知道你为什么要先尝试批量更新——无论如何你都需要编写代码来进行单独的插入——为什么不首先使用它呢?
    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2021-11-05
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多