성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و

Transaction 본문

백엔드개발/JDBC

Transaction

hyemi_flora 2023. 11. 13. 11:53

 

package database;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

 

public class J04_Transaction {

 

        public static void main(String[] args) {

 

                try(

                        Connection conn = JdbcConnection.getConnection();

                ) {

                        

                        // 커넥션을 받아오면 (연결 인스턴스) 자동으로 오토커밋이 켜져있다.

                        // 해당 연결인스턴스의 자동 커밋을 비활성화해야 커밋과 롯백을 활용한 트랜잭션 관리가 가능하다

                        conn.setAutoCommit(false);

                        

                        String sql1 = "INSERT INTO "

                                        + "fruits(fruit_id, fruit_name, fruit_price) "

                                        + "VALUES(fruit_id_seq.nextval,'Pineapple', 5000)";

                        

                        try(PreparedStatement pstmt = conn.prepareStatement(sql1)){

                                for (int i = 0; i <5; ++i) {

                                pstmt.executeUpdate();

                                }

                        }

                        

                        // 확률적으로 롤백이 되거나, 커밋이되도록

                        if((int)(Math.random() *2) ==1){

                                System.out.println("파인애플 5개 추가 및 커밋되었습니다.");

                                conn.commit();

                        } else {

                                // 롤백되더라도 시퀀스 번호는 돌아가지 않아서, 중간에 비어있는 시퀀스 번호들을 볼수 있다.

                                

                                System.out.println("파인애플 5개 추가 되었다가 롤백되었습니다.");

                                System.out.println("롤백되더라도 시퀀스 번호는 돌아가지 않습니다...");

                                conn.rollback();

                        }

                        

                } catch (SQLException e) {

                        e.printStackTrace();

                }

 

        }

 

}

'백엔드개발 > JDBC' 카테고리의 다른 글

Data Model Class  (0) 2023.11.13
Meta data  (1) 2023.11.13
Execute Update  (0) 2023.11.13
Prepare Statement  (0) 2023.11.13
Select QUIZ / DB로부터 모든 사원의 사번/이름/부서명/직책명 읽어 파일형태로 저장하기 /  (0) 2023.11.13