Java 使用ScriptRunner时,如果一次插入失败,则回滚;“运行脚本”;方法
上面是我用来执行SQL脚本文件的代码段 如果脚本中有多个插入,我希望在事务中执行所有插入,如果其中一个插入失败,则不应将任何内容写入数据库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);
我想通过代码而不是脚本来处理这个问题。通过将“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);