배치 처리를 사용하면 관련 SQL 문을 하나의 배치로 그룹화하여 데이터베이스에 한 번에 제출할 수 있습니다. 여러 SQL 문을 한 번에 데이터베이스에 보내면 통신 오버헤드를 줄일 수 있어 성능이 향상됩니다.
JDBC 드라이버가 이 기능을 지원해야 하는 것은 아니며, DatabaseMetaData.supportsBatchUpdates() 메서드를 사용하여 대상 데이터베이스가 배치 업데이트 처리를 지원하는지 확인해야 합니다. 이 메서드는 JDBC 드라이버가 이 기능을 지원하면 true를 반환합니다.
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) {
Statement st = conn.createStatement();
DatabaseMetaData metaData = conn.getMetaData();
System.out.println(metaData.supportsBatchUpdates());
} catch(SQLException e) {
e.printStackTrace();
}
Statement, PreparedStatement, CallableStatement의 addBatch() 메서드를 사용하여 개별 문을 배치에 추가할 수 있습니다. executeBatch()는 그룹화된 모든 문을 실행하는 데 사용됩니다.
executeBatch()는 정수 배열을 반환하며, 배열의 각 요소는 각각의 업데이트 문에 대한 업데이트 수를 나타냅니다.
개별 문을 배치에 추가할 수 있는 것처럼 clearBatch() 메서드를 사용하여 이를 제거할 수 있습니다. 이 메서드는 addBatch() 메서드로 추가한 모든 문을 제거하지만, 특정 문을 선택적으로 제거할 수는 없습니다.
Statement 객체를 사용한 배치 처리
- createStatement() 메서드를 사용하여 Statement 객체를 생성합니다.
- setAutoCommit()을 사용하여 자동 커밋을 false로 설정합니다.
- 생성된 Statement 객체에서 addBatch() 메서드를 사용하여 원하는 만큼의 SQL 문을 배치에 추가합니다.
- 생성된 Statement 객체에서 executeBatch() 메서드를 사용하여 모든 SQL 문을 실행합니다.
- commit() 메서드를 사용하여 모든 변경 사항을 커밋합니다.
// Statement 객체 생성
Statement stmt = conn.createStatement();
// 자동 커밋을 false로 설정
conn.setAutoCommit(false);
// SQL 문 생성
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(200,'Zia', 'Ali', 30)";
// 위의 SQL 문을 배치에 추가
stmt.addBatch(SQL);
// 또 다른 SQL 문 생성
SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(201,'Raj', 'Kumar', 35)";
// 위의 SQL 문을 배치에 추가
stmt.addBatch(SQL);
// 또 다른 SQL 문 생성
SQL = "UPDATE Employees SET age = 35 " +
"WHERE id = 100";
// 위의 SQL 문을 배치에 추가
stmt.addBatch(SQL);
// 반환된 값을 저장할 int[] 배열 생성
int[] count = stmt.executeBatch();
// 명시적으로 문을 커밋하여 변경 사항 적용
conn.commit();
PrepareStatement 객체를 사용한 배치 처리
// SQL 문 생성
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(?, ?, ?, ?)";
// PrepareStatement 객체 생성
PreparedStatement pstmt = conn.prepareStatement(SQL);
// 자동 커밋을 false로 설정
conn.setAutoCommit(false);
// 변수 설정
pstmt.setInt(1, 400);
pstmt.setString(2, "Pappu");
pstmt.setString(3, "Singh");
pstmt.setInt(4, 33);
// 배치에 추가
pstmt.addBatch();
// 변수 설정
pstmt.setInt(1, 401);
pstmt.setString(2, "Pawan");
pstmt.setString(3, "Singh");
pstmt.setInt(4, 31);
// 배치에 추가
pstmt.addBatch();
// 추가 배치 작업
// ...
// 반환된 값을 저장할 int[] 배열 생성
int[] count = pstmt.executeBatch();
// 명시적으로 문을 커밋하여 변경 사항 적용
conn.commit();
'Databases > JDBC' 카테고리의 다른 글
[JDBC] 출력 스트림 사용하기 (0) | 2024.07.08 |
---|---|
[JDBC] Stored Procedure(저장 프로시저) 사용하기 (0) | 2024.07.08 |
[JDBC] 예외 처리 (0) | 2024.07.08 |
[JDBC] Transactions 사용법 (0) | 2024.07.05 |
[JDBC] Data Types (0) | 2024.07.05 |