啟動事務 conn.setAutoCommit();
創新互聯建站是專業的鄠邑網站建設公司,鄠邑接單;提供成都網站設計、成都網站建設、外貿網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行鄠邑網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
這個不是啟動事務,而是設置事務是否自動提交,默認是自動提交,如果要手動控的話,寫成conn.setAutoCommit(false);
if(rs.next){
...執行更新
conn.commit();
}
這個也不對,RS不可能執更新操作。只能是查詢。
如果你進行了鎖表操作,那么如果沒有commit()或rollbak()方法,是不會進行解鎖操作的。
下面給你些代碼段以做參考。
public class SQLCondition{
public ResultSet execuQuery(Connection conn) throws SQLException{
檢索操作.......
}
public int execuUpdate(Connection conn) throws SQLException{
更新操作.......
}
}
public class DBAccess(){
public void execute(){
SQLCondition condition = .....;
Connection conn = .....;
try{
conn.setAutoCommit(false); //設成非自動提交
condition.execuQuery(conn);
condition.execuUpdate(conn);
//如果操作成功會走到這一步,進行提交,可以解鎖
conn.commit();
}catch(SQLException){
//出現任何的SQL異常都可以捕捉到,進行事務回滾,也可以解鎖。
conn.rollbak();
}
}
}
自動默認是回滾事務?
默認的話,是執行一條就進行提交,如果錯了會回滾。
什么錯啊?錯誤的內容是什么!
是不是默認的是自動提交 你要修改它的屬性!我給忘了就是不讓他默認提交然后你在掉這個提交方法!
getPreparedStatement(conn,sql,item);
方法是干啥的,貼出來
其實問題很簡單
MyLog.e("提交之前");
//在try塊內添加事務的提交操作,表示操作無異常,提交事務。
conn.commit();//此處都沒有執行到
MyLog.e("全部提交了");
}?catch?(SQLException?e)?{
isInsertOk?=?false;
MyLog.e("出錯,準備rollback");
?try?{
上面的那個SQLException e
換成? Exception e? 應該就可以了,
一組業務整體處理的行為叫一個事務。這一組的業務都能成功處理,我們就可以把這個事務提交來保存你已做的行為結果。但如果一組中有任何的差錯出現的話,我們就認為這事務不成功,需要回滾來撤消之前的操作。舉例:你去銀行轉賬,轉賬我們有兩步吧,從你賬戶中取出錢再往他賬戶中加錢。那這兩步銀行是必須要確保正確無誤的進行的。要被看做成一個事務。其中任何一步出錯就算是轉賬失敗,但可能你這時是已經從你賬戶中扣了錢了,又沒往他賬戶里加錢?怎么辦算了?你不肯吧。所以銀行會事務回滾,不保存你剛才的操作,即恢復到你沒轉賬之前的狀態。累啊