English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC 배치 (Batch)

배치는 관련 SQL 문을 하나의 배치에 그룹화하여 데이터베이스에 한 번의 호출로 제출할 수 있도록 합니다.

여러 개의 SQL 문을 동시에 데이터베이스로 전송할 때, 통신 비용을 줄이고 성능을 향상시킬 수 있습니다.

  • JDBC 드라이버는 이 기능을 지원하지 않습니다. 대신, DatabaseMetaData.supportsBatchUpdates() 메서드를 사용하여 목표 데이터베이스가 배치 업데이트 처리를 지원하는지 확인해야 합니다. JDBC 드라이버가 이 기능을 지원하면该方法은 true를 반환합니다.

  • Statement, PreparedStatement, CallableStatement의 addBatch() 메서드는 배치에 단일 문장을 추가하는 데 사용되며, executeBatch()는 모든 문장을 한 번에 실행하기 위해 사용됩니다.

  • executeBatch()는 정수 배열을 반환하며, 배열의 각 요소는 해당 update 문의 업데이트 카운트를 나타냅니다.

  • 또한 배치에 문장을 추가하여 처리할 수 있듯이, clearBatch() 메서드를 사용하여 그들을 제거할 수도 있습니다. 이 메서드는 addBatch() 메서드를 추가한 모든 문장을 제거합니다. 하지만, 제거할 문장을 선택할 수는 없습니다.

문장 객체를 사용하여 배치를 수행합니다

이는 배치와 Statement 객체를 함께 사용하는 표준 단계 시퀀스입니다-

  • 이 두 가지를 사용하여createStatement()메서드로 Statement 객체를 생성합니다.

  • setAutoCommit()를 사용하여 auto-commit 을 false로 설정합니다.

  • 생성된 문장 객체에 대해 addBatch() 메서드를 사용하여 배치에 SQL 문을 추가할 수 있습니다.

  • 모든 SQL 문장을 실행하기 위해 생성된 문장 객체에 executeBatch() 메서드를 사용합니다

  • 마지막으로,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 문을 다시 생성합니다
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(201,'Raj', 'Kumar', 35)";
// 위의 SQL 문을 배치에 추가합니다.
stmt.addBatch(SQL);
// 다른 SQL 문을 다시 생성합니다
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// 위의 SQL 문을 배치에 추가합니다.
stmt.addBatch(SQL);
// 반환 값을 저장할 int[]를 생성합니다
int[] count = stmt.executeBatch();
//변경을 적용하기 위해 명확한 커밋 문장을 사용합니다
conn.commit();

좋게 이해하기 위해, 다음을 연구해 보겠습니다배치 예제 코드

PrepareStatement 객체를 사용하여 배치를 수행합니다

이는 batch과 PrepareStatement 객체를 함께 사용하는 표준 단계 시퀀스입니다-

  1. 대체자를 사용하여 SQL 문을 생성합니다.

  2. PrepareStatement() 메서드 중 하나를 사용하여 PrepareStatement 객체를 생성합니다.

  3. setAutoCommit()를 사용하여 auto-commit 을 false로 설정합니다.

  4. 가장 많은 SQL 문장을 배치에 추가하기 위해 생성된 문장 객체에 addBatch() 메서드를 사용합니다

  5. 모든 SQL 문장을 실행하기 위해 생성된 문장 객체에 executeBatch() 메서드를 사용합니다

  6. 마지막으로,commit()모든 변경 사항을 제출하는 메서드

다음 코드 부분은 PrepareStatement 객체를 사용하여 배치 업데이트를 수행하는 예제를 제공합니다-

// SQL 문장 생성
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(?, ?, ?, ?)";
// PrepareStatement 객체 생성
PreparedStatemen 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 = stmt.executeBatch();
//변경을 적용하기 위해 명확한 커밋 문장을 사용합니다
conn.commit();

좋게 이해하기 위해, 다음을 연구해 보겠습니다배치 예제 코드