자바 EE 의 트 랜 잭 션 처리

1.업무 상황:은행 이 체 를 할 때 데이터 베 이 스 를 두 가지 조작 을 해 야 한다.한 계좌 의 돈 이 줄 어 들 고 다른 계좌 의 돈 이 많아 질 것 이다.그러나 작업 의 선후 순서 로 인해 두 작업 사이 에 고장 이 나 면 데이터 가 일치 하지 않 을 수 있다.따라서 하나의 사 무 를 설계 해 야 합 니 다.두 문장 이 모두 실 행 된 후에 데이터 수정 이 진정 으로 제출 되 어야 합 니 다(Commit).그렇지 않 으 면 데이터 조작 스크롤 백(Rollback).기본 적 인 상황 에서 executeUpdate 함 수 는 데이터베이스 에 변 경 된 결 과 를 제출 합 니 다.이 때 Connection 으로 이 함수 가 변 경 된 결 과 를 자동 으로 제출 하거나 스크롤 백 할 지 여 부 를 정의 할 수 있 습 니 다.다음은 코드 를 보 겠 습 니 다.
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.Statement;
  public class Transaction {
  public static void main(String[] args) throws Exception {
  Connection conn = null;
  try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn = DriverManager.getConnection("jdbc:odbc:DSSchool");
            Statement stat = conn.createStatement();
            conn.setAutoCommit(false);//          
  String sql1 = "select * from Tstudent";
  String sql2 = "select * from Tstudent";
  stat.executeUpdate(sql1);
  stat.executeUpdate(sql2);
  conn.commit(); //       
  } catch (Exception ex) {
  conn.rollback(); //   
  } finally {
  conn.close();
         }
     }
  }

상기 코드 를 통 해 알 수 있 듯 이 Connection 에서 execute Update 를 설정 할 수 있 습 니 다.자동 으로 제출 하지 마 십시오.코드 는 다음 과 같 습 니 다.
  conn.setAutoCommit(false);

다음 코드 는 두 개의 sql 문 구 를 실행 한 후에 이 동작 을 제출 하 는 것 을 의미 합 니 다.
stat.executeUpdate(sql1);
stat.executeUpdate(sql2);
 
 发生异常后,执行后的修改将会回退: 
 
  conn.rollback();

이렇게 하면 두 문장 이 모두 실행 되 거나 모두 실행 되 지 않 는 다 는 것 을 보장 한다.

좋은 웹페이지 즐겨찾기