새로운 JDBC3.0 SavePoint 인터페이스는 추가 트랜잭션 컨트롤을 제공합니다. 대부분의 최신 DBM은 Oracle PL/SQL과 같은 환경에서 저장 포인트를 지원합니다.
저장 포인트를 설정할 때 트랜잭션에서 논리적 롤백 포인트를 정의하십시오. SavePoint가 지나면 오류가 발생하면 Rollback 메소드를 사용하여 SavePoint 이후의 모든 변경 사항 또는 변경 사항 만 취소 할 수 있습니다.
연결 개체를위한 두 가지 새로운 방법이 저장 포인트를 관리하는 데 도움이됩니다.
setSavePoint (String SavePointName) : 새 저장 포인트를 정의합니다. 또한 SavePoint 객체를 반환합니다.
ReleaseAvePoint (SavePoint SavePointName) : SavePoint를 삭제합니다. 매개 변수로 SavePoint 객체가 필요합니다. 이 객체는 일반적으로 setsavepoint () 메소드에 의해 생성됩니다.
지정된 SavePoint로 롤백하는 롤백 (String SavePointName) 메소드가 있습니다.
다음 예제는 SavePoint 객체를 사용하는 방법을 보여줍니다.
try {// 유효한 연결 객체를 가정합니다 Conn.setAutocommit (false); 문자 stmt = conn.createstatement (); // savepoint savepoint savepoint savepoint1 = conn.setsavepoint ( "savepoint1"); 문자열 sql = "직원에 삽입" + "값 (106, 20, 'rita', 'tez')"; stmt.executeupdate (SQL); // String sql = "삽입 된" + "값 (107, 22, 'sita', 'tez')을 깨뜨리는 오르플 링 된 SQL 문을 제출합니다. stmt.executeupdate (SQL); // 오류가 없으면 변경 사항을 커밋하십시오. conn.commit ();} catch (sqlexception se) {// 오류가있는 경우. conn.rollback (savepoint1);} 이 경우 위의 삽입 문은 성공하지 못하고 모든 것이 롤백됩니다.
아래는 SetSavePoint 및 Transaction Tutorial을 사용하여 롤백을 설명하는 예입니다.
이전 장의 환경 및 데이터베이스 설치를 기반으로 한이 샘플 코드가 설명되었습니다.
다음 예제 jdbcexample.java를 복사하고 다음과 같이 컴파일하고 실행하십시오.
// 1 단계. 가져 오기 필수 패키지 java.sql.*; public class jdbcexample {// jdbc 드라이버 이름 및 데이터베이스 URL 정적 최종 문자열 jdbc_driver = "com.mysql.jdbc.driver"; 정적 최종 문자열 db_url = "jdbc : mysql : // localhost/emp"; // 데이터베이스 자격 증명 정적 최종 문자열 user = "사용자 이름"; 정적 최종 문자열 pass = "비밀번호"; public static void main (String [] args) {Connection Conn = null; 문자 stmt = null; {// 2 단계 : jdbc driver class.forname을 등록합니다 ( "com.mysql.jdbc.driver"); // 3 단계 : Connection System.out.println을 엽니 다 ( "데이터베이스 연결 ..."); conn = drivermanager.getConnection (db_url, user, pass); // 4 단계 : 자동 커밋을 False로 설정합니다. conn.setAutocommit (false); // 5 단계 : rs 예제에 필요한 인수를 사용하여 쿼리를 실행합니다. System.out.println ( "제작 명령문 ..."); stmt = conn.createstatement (); // 6 단계 : 이제 사용 가능한 모든 레코드를 나열하십시오. String SQL = "ID, 첫 번째, 마지막, 직원의 연령 선택"; resultSet rs = stmt.executeQuery (SQL); System.out.println ( "참조 목록 세트 ..."); 프린트 (Rs); // 7 단계 : 104보다 id grater가있는 행을 삭제하지만 그렇게하기 전에 포인트를 저장하십시오. SavePoint SavePoint1 = Conn.SetSavePoint ( "rows_deleted_1"); System.out.println ( "삭제 행 ..."); 문자열 sql = "직원에서 삭제" + "여기서 id = 110"; stmt.executeupdate (SQL); // oops ... 우리는 너무 잘못된 직원을 삭제했습니다! // 8 단계 : 롤백 변경 afetr Save Point 2. Conn.Rollback (SavePoint1); // 9 단계 : 104보다 id grater가있는 행을 삭제하지만 그렇게하기 전에 포인트를 저장하십시오. SavePoint SavePoint2 = Conn.SetSavePoint ( "rows_deleted_2"); System.out.println ( "삭제 행 ..."); SQL = "직원" + "에서 삭제 된 id = 95"; stmt.executeupdate (SQL); // 10 단계 : 이제 사용 가능한 모든 레코드를 나열하십시오. SQL = "ID, 첫 번째, 마지막, 직원의 연령 선택"; rs = stmt.executeQuery (SQL); System.out.println ( "참조 목록 세트 ..."); 프린트 (Rs); // 10 단계 : 정리 환경 rs.close (); stmt.close (); conn.close (); } catch (sqlexception se) {// jdbc se.printstacktrace ()의 오류 핸들. // 오류가 있으면 변경 사항이 롤백됩니다. System.out.println ( "여기에서 데이터 롤백 데이터 ..."); 시도 {if conn! = null) conn.rollback (); } catch (sqlexception se2) {se2.printstacktrace (); } // end try} catch (예외 e) {// class.forname e.printstacktrace ()의 오류 핸들. } 마침내 {// 마지막으로 자원을 닫는 데 사용되는 블록 {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // 우리가 할 수있는 것은 없습니다 {if (conn! = null) conn.close (); } catch (sqlexception se) {se.printstacktrace (); } // 종료 마침내 try} // End try system.out.println ( "goodbye!");} // 종료 메인 퍼블릭 정적 void printrs (resultet rs) sqlexception {// 첫 번째 행으로 시작해야합니다. rs.beforefirst (); while (rs.next ()) {// 열별로 검색 int id = rs.getint ( "id"); int age = rs.getint ( "Age"); 문자열 first = rs.getString ( "첫 번째"); 문자열 last = rs.getString ( "last"); // 디스플레이 값 값 system.out.print ( "id :" + id); System.out.print ( ", 나이 :" + age); System.out.print ( ", 첫 번째 :" + first); System.out.println ( ", 마지막 :" + last); } system.out.println (); } // end printrs ()} // end jdbcexample이제 위의 예를 다음과 같이 컴파일하겠습니다.
C :> javac jdbcexample.java
jdbcexample을 실행할 때 다음과 같은 결과가 발생합니다.
C :> Java jdbcexample
Connecting to database...Creating statement...List result set for reference....ID: 95, Age: 20, First: Sima, Last: ChugID: 100, Age: 18, First: Zara, Last: AliID: 101, Age: 25, First: Mahnaz, Last: FatmaID: 102, Age: 30, First: Zaid, Last: KhanID: 103, Age: 30, First: Sumit, Last: MittalID: 110, Age: 20, 첫 번째 : Sima, Last : Chugdeleting Row ... 삭제 행 삭제 .... 참조에 대한 목록 결과 세트 .... ID : 100, 연령 : 18, 첫 번째 : Zara, Last : Aliid : 101, Age : 25, First : Last : 102, Age : 30, First : Zaid, Last : Khanid : 103, Age : 30, First : Last : Mittalid : 110, First : 20, First : Last : 110. chuggoodbye!