SQL 세이브포인트는 작업 단위(UOW) 내의 특정 시점에서
데이터 및 스키마의 상태를 나타냅니다. SQL문을 사용하여 세이브포인트를 설정하고 세이브포인트를 릴리스하며
세이브포인트가 나타내는 상태로 데이터 및 스키마를 복원할 수 있습니다.
IBM® Data Server Driver for JDBC and SQLJ 는 세이브포인트 사용을 위해 다음 메소드를 지원합니다.
Connection.setSavepoint() or Connection.setSavepoint(String name)
세이브포인트를 설정합니다. 이러한 메소드는
이후의 releaseSavepoint 또는 rollback 조작에서 사용되는 Savepoint 오브젝트를 리턴합니다.
이러한 메소드 중 하나를 실행할 때 데이터 서버는 ON ROLLBACK RETAIN CURSORS가 포함된 SAVEPOINT문의 양식을 실행합니다.
Connection.releaseSavepoint(Savepoint savepoint)
지정된 세이브포인트 및 이후에 설정된 모든 세이브포인트를 릴리스합니다.
Connection.rollback(Savepoint savepoint)
지정된 세이브포인트로 작업을 롤백합니다.
DatabaseMetaData.supportsSavepoints()
데이터 소스가 세이브포인트를 지원하는지를 표시합니다.
메소드 DB2Connection.setSavePointUniqueOption을
호출하여 세이브포인트가 고유한지를 표시할 수 있습니다. 이 메소드를 true 값으로 호출하는 경우, 애플리케이션은 동일한 복구 단위 내에서 동일한 이름의 세이브포인트를 두 개 이상 설정할 수 없습니다. 이 메소드를 false(기본값) 값으로 호출하는 경우 동일한 복구 단위 내에서 동일한 이름의 다중 세이브포인트를 작성할 수 있지만 세이브포인트 작성은 이전에 작성된 세이브포인트를 동일한 이름으로 삭제합니다.
다음 예에서는 세이브포인트를 설정하고 세이브포인트로 롤백하며 세이브포인트를 릴리스하는 방법을 설명합니다.그림 1. JDBC 애플리케이션에서 세이브포인트 설정, 롤백, 릴리스
Connection con;
Statement stmt;
ResultSet rs;
String empNumVar;
int shoeSizeVar;
…
con.setAutoCommit(false); // set autocommit OFF
stmt = con.createStatement(); // Create a Statement object
… // Perform some SQL
con.commit(); // Commit the transaction
stmt.executeUpdate("INSERT INTO EMP_SHOE " +
"VALUES ('000010', 6)"); // Insert a row
((com.ibm.db2.jcc.DB2Connection)con).setSavePointUniqueOption(true);
// Indicate that savepoints
// are unique within a unit
// of recovery
Savepoint savept = con.setSavepoint("savepoint1");
// Create a savepoint
…
stmt.executeUpdate("INSERT INTO EMP_SHOE " +
"VALUES ('000020', 10)"); // Insert another row
conn.rollback(savept); // Roll back work to the point
// after the first insert
…
con.releaseSavepoint(savept); // Release the savepoint
stmt.close(); // Close the Statement
conn.commit(); // Commit the transaction