java實現資料庫事物的處理
以前很不理解回滾這個東西,現在突然明白了,通過這個例子
通過一個dao 和一個service層來實現
建立資料庫
create table money(name varchar(20),qian int(20));
insert into money(name,qian)values('zs',1000);
insert into money(name,qian)values('ls',1000);
Dao層實現轉賬功能 類名: AccountDao
因為一個事物 只能通過一個Connection 物件,所以我們這兒將Connection 作為一個引數傳進
public void zhuanzhang(Connection conn,String name,int qian){
String sql = "update money set qian =qian+? where name=?"
PrepareStatement pro = conn.prepareStatement(sql);
pro.setInt(1,qian);
pro.setString(2,name);
int index = pro.executeUpdate();
/*這兒如果出錯,那麼返回的結果是一個0,求大神寫下更簡單的方法,我在這兒丟擲一個異常
在service 層可以捕獲到
*/
if(index==0){
throw new RuntimeException("錯誤");
}
}
我在service層開始實現程式碼 類名:AccuntService
public void shixian(String from,String to,int qian){
Connection conn = null;
try{
conn=Jdbcutil.getConnection();//自己寫的工具。
//開始事物
conn.setAutoCommit(false);//autoCommit
- 為 true
表示啟用自動提交模式;為 false
AccountDao accd = new AccountDao();
accd.zhuanzhang(from,qian);
accd,zhuanzhuang(to,qian);
conn.commit();
conn.close();
}catch(Exception e){
try{
conn.rollback();//捕獲異常,事物回滾。
}catch(SqlException e){
e.pran...();
}
}
}
//測試類 測試一下
@Test
pubic void fun1(){
AccuntService as = new AccuntService();
as.shixian('zs','ls',100);
}