1. 程式人生 > >java實現資料庫事物的處理

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);

}