본문 바로가기

자바 DB 연동

자바 DB 연동 - 트랜잭션


import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.sql.Connection;

import java.sql.PreparedStatement;


import com.util.DBConn;

//영화 예매 소스 짤 때 처럼 하나가 실행취소가 되면 전체가 롤백되는 소스

public class Test4 {

public static void main(String[] args)  {

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

Connection conn=DBConn.getConnection();

PreparedStatement pstmt=null;

String sql;

int id;

String name, tel, birth;

/* 

* 프로그램에서 INSERT, UPDATE, DELETE를 하면

* 기본이 자동으로 COMMIT 되므로 원상태로 복원할 수 없다

*/

try{

System.out.print("번호?");

id=Integer.parseInt(br.readLine());

System.out.print("이름?");

name=br.readLine();

System.out.print("전화?");

tel=br.readLine();

System.out.print("생일?");

birth=br.readLine();

conn.setAutoCommit(false);    // 이 소스의 핵심 명령어

//기본이 true이며 commit을 안해도 commit 됨

//false 이면 반드시 commit을 해야함

//demo1 테이블에 추가

sql="INSERT INTO demo1(id, name) VALUES(?,?)";

pstmt=conn.prepareStatement(sql);

pstmt.setInt(1,id);

pstmt.setString(2, tel);

pstmt.executeUpdate();

pstmt.close();

//demo2 테이블에 추가

sql="INSERT INTO demo2(id, name) VALUES(?,?)";

pstmt=conn.prepareStatement(sql);

pstmt.setInt(1,id);

pstmt.setString(2, tel);

pstmt.executeUpdate();

pstmt.close();

//demo3 테이블에 추가

sql="INSERT INTO demo3(id, name) VALUES(?,?)";

pstmt=conn.prepareStatement(sql);

pstmt.setInt(1,id);

pstmt.setString(2, tel);

pstmt.executeUpdate();

pstmt.close();

//트랜잭션 완료

conn.commit();

}catch(Exception e){

//예외가 발생하면 rollback(하나라도 예외발생시 롤백)

try{    // 이 소스의 핵심 구문

conn.rollback();

} catch(Exception a){

}

System.out.println(e.toString());

}

}


}