Java 使用ScriptRunner时,如果一次插入失败,则回滚;“运行脚本”;方法

Java 使用ScriptRunner时,如果一次插入失败,则回滚;“运行脚本”;方法,java,jdbc,oracle11g,ibatis,ojdbc,Java,Jdbc,Oracle11g,Ibatis,Ojdbc,上面是我用来执行SQL脚本文件的代码段 如果脚本中有多个插入,我希望在事务中执行所有插入,如果其中一个插入失败,则不应将任何内容写入数据库 我想通过代码而不是脚本来处理这个问题。通过将“StopOnError”参数设置为true来实现这一点 Connection con = null; try { con = datasource.getConnection(); ScriptRunner sr = new ScriptRunner(con);

上面是我用来执行SQL脚本文件的代码段

如果脚本中有多个插入,我希望在事务中执行所有插入,如果其中一个插入失败,则不应将任何内容写入数据库


我想通过代码而不是脚本来处理这个问题。

通过将“StopOnError”参数设置为true来实现这一点

Connection con = null;
    try {
        con = datasource.getConnection();

        ScriptRunner sr = new ScriptRunner(con);
        Reader reader = new BufferedReader(new FileReader("filePath");
        sr.runScript(reader);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        if (con!=null) try {con.close();}catch (Exception ignore) {}
    }

您可以使用
commit()
rollback()
(以及
setAutoCommit(false)
)方法来控制事务。如果插入失败且数据仍写入数据库,则很可能已启用自动提交。如果您还提供了
ScriptRunner.runScript()
方法,我也会有所帮助。@PavelSmirnov它是“ibatis”库中的预定义方法。这不是我实现的方法。根据文档,有可用的
setTopError()
setAutoCommit()
方法。你可以试着和他们一起玩(如果你还没有这样做的话),看看是否有帮助。
        ScriptRunner sr = new ScriptRunner(con);
        sr.setStopOnError(true);