基礎(chǔ)介紹
1.先設(shè)置為手動提交
conn.setAutoCommit(false); //將自動提交設(shè)置為false?
2.若成功則提交
conn.commit(); //當(dāng)操作成功后手動提交?
3.若失敗則回滾
conn.rollback(); //一旦其中一個操作出錯都將回滾,使兩個操作都不成功
代碼演示
注:由于各種寫法,文件結(jié)構(gòu)等都各不相同卸例,此處僅供參考司志。
1.演示刪除主表,外鍵裆悄,文件,同時成功,失敗返回但校。
2.因為文件刪除了,撤回很麻煩啡氢,所以選擇最后刪除文件状囱,刪除文件成功在提交。
3.注意別忘了異常時回滾空执,以及關(guān)閉數(shù)據(jù)庫的調(diào)用浪箭。
Map<String, Object> rtmap = new HashMap();
try {
? ? ? ? conn.setAutoCommit(false);? //將自動提交設(shè)置為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();? ? ? //當(dāng)兩個操作成功后手動提交?
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? rtmap.put("msg", "刪除文件失敗");
? ? ? ? ? ? ? ? ? ? ? ? conn.rollback();? ? //一旦其中一個操作出錯都將回滾,使兩個操作都不成功?
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? rtmap.put("msg", "刪除xx失敗");
? ? ? ? ? ? }
? ? ? ? ? ? conn.commit();? ? ? //當(dāng)兩個操作成功后手動提交?
? ? ? ? } 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();
? ? ? ? }
? ? }