35DAY / mysql / TRANSACTION

2017. 5. 24. 14:45

TRANSACTION 트랜잭션

몇 단계로 처리를 나누어하는 SQL 명령을 실행하는 경우에 트랜잭션을 사용한다.
트랜잭션을 이용하여 연산을 수행할 때 에러가 발생하면 Rollback 이 되어 종료된다.
롤백하면 트랜잭션 내에서 행해진 변경사항들이 모두 취소된다.
아무런 에러가 발생하지 않을경우만 Commit이 되어 변경사항이 적용된다.




OldidDao.java : Oldid DB에 id값을 저장하는 클래스

CustomerService.java : 회원을  삭제와 동시에 데이터베이스에 추가하는 클래스

둘 중 하나가 실패시 ROLLBACK을 하고 

성공했을 때 COMMIT을 한다.


package Service;

 

import java.sql.Connection;

import java.sql.SQLException;

public class CustomerService {

 

      private DBService dbservice;

      private CustomerDao customerDao;

      private OldidDao oldidDao;

     

      //java실행시 바로실행

      public CustomerService(){

            dbservice = new DBService();

           

      }

      public void removeCustomer(int id){

            customerDao = new CustomerDao();

            oldidDao = new OldidDao();

            Connection conn = null;

            try{

                  conn=dbservice.getConnection();

                  customerDao.deleteCustomer(dbservice,conn, id);

                  oldidDao.insertId(dbservice, conn, id);

                  conn.commit();

            }

             catch (SQLException e){

                        e.printStackTrace();

                        try{

                             conn.rollback();

                        }catch (SQLException e1) {

                             e1.printStackTrace();

                        }

                  }

            finally{

                  try {

                        conn.close();

                  } catch (SQLException e) {

                        e.printStackTrace();

                  }

 

            }

      }

}

 

package Service;

import java.sql.*;

 

public class OldidDao {

 

      public int insertId(DBService dbservice, Connection conn,int id) throws SQLException{

 

            int returnRow = 0;

            PreparedStatement stmt = null;

            stmt = conn.prepareStatement("INSERT INTO oldid(id)  VALUES (?)");

            stmt.setInt(1, id);

            returnRow=stmt.executeUpdate();

           

            return returnRow;

      }

}

 

+ Recent posts