1.该解决问题
因为一个发布可能会涉及对多个表进行insert操作,JSON数组中的每一条JSON应该是一个执行单元,如果这条JSON涉及insert操作的表有表A、表B,如果在对表B插入数据的时候出现了错误,未能插入数据,则对表A的insert的操作也应该撤销。
2.解决方法
要么全部执行,要么都不执行,这里我想到了使用事务解决这个问题。
首先设置事务不自动提交:
//设置事务不自动提交
conn.setAutoCommit(false);
然后把想要一次性提交的几个sql语句用事务进行提交
//把想要一次性提交的几个sql语句用事务进行提交
stmt = conn.createStatement();
for (String sql : sqls) {
stmt.executeUpdate(sql);
}
conn.commit(); //使用commit提交事务
若捕获了执行异常,进行回滚,回滚到设置不自动提交之前,记得把事务再改成自动提交。
catch (Exception e){
e.printStackTrace();
//捕获异常,进行数据的回滚
try {
assert conn != null;
conn.rollback();//回滚
//把事务再改成自动提交(默认状态)
conn.setAutoCommit(true);
}catch (SQLException exception){
exception.printStackTrace();
}
}