數據定義語言DDL(Data Definition Language) 如 create、alter、drop,
數據操作語言DML(Data Munipulation Language) 如 insert、update、delete,
數據控制語言DCL(Data Control Language) 如 grant、revoke
Connection conn = DBUtil.getConnection();
Statement st = null;
try {
conn.setAutoCommit(false); //關閉自動提交
st = conn.createStatement();
st.executeUpdate("alter table test rename column name to name2"); //①直接commit
st.executeUpdate("alter table test rename column address too address2"); //②故意將to寫為too
conn.commit();
} catch (SQLException e) {
try {
conn.rollback(); //③回滾
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
DBUtil.closeAll(null, st, conn);
}
上面例子是執行修改字段名稱 ①正常執行,在②語句中故意產生錯誤,報異常然後跳到③
最後結果是 address未做修改,name已經修改為了name2
Oracle在執行DDL語句時會先執行commit,所以就不能對DDL語句進行回滾
如果非要進行回滾的話,可進行反向操作,就是在②出錯的時候再將①中的name改回去
如果語句很多的話,未免太麻煩。不知道有沒有方法可解決!