基础介绍
1.先设置为手动提交
conn.setAutoCommit(false); //将自动提交设置为false
2.若成功则提交
conn.commit(); //当操作成功后手动提交
3.若失败则回滚
conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功
代码演示
注:由于各种写法,文件结构等都各不相同,此处仅供参考。
1.演示删除主表,外键,文件,同时成功,失败返回。
2.因为文件删除了,撤回很麻烦,所以选择最后删除文件,删除文件成功在提交。
3.注意别忘了异常时回滚,以及关闭数据库的调用。
Map
try {
conn.setAutoCommit(false); //将自动提交设置为false
sql = "delete from xxx where xiaozu_id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, xxx);
int ok = pstmt.executeUpdate();
if (ok > 0) {
sql = "delete from xxx where id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, xxx);
int insert_rs = pstmt.executeUpdate();
if (insert_rs > 0) {
//删除---文件
if (new File(fileName).delete()) {
rtmap.put("msg", "success");
conn.commit(); //当两个操作成功后手动提交
} else {
rtmap.put("msg", "删除文件失败");
conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功
}
} else {
rtmap.put("msg", "删除xx失败");
}
conn.commit(); //当两个操作成功后手动提交
} else {
rtmap.put("msg", "删除图片失败");
}
} catch (Exception ex) {
conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功
rtmap.put("msg", "java程序GG了!");
ex.printStackTrace();
} finally {
out.println(JSON.toJSON(rtmap));
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
}