다음을 통해 공유


일괄 작업 수행

JDBC 드라이버 다운로드

SQL Server 데이터베이스를 여러 번 업데이트할 때 성능을 향상시키기 위해 SQL Server용 Microsoft JDBC Driver는 여러 업데이트를 하나의 작업으로 전송하는 기능을 지원하며, 이를 일괄 처리라고 합니다.

SQLServerStatement, SQLServerPreparedStatement, SQLServerCallableStatement 클래스를 모두 사용하여 일괄 업데이트를 제출할 수 있습니다. addBatch 메서드는 명령을 추가하는 데 사용됩니다. clearBatch 메서드는 명령 목록을 지우는 데 사용됩니다. executeBatch 메서드는 모든 명령을 처리 목적으로 제출하는 데 사용됩니다. 단순 업데이트 횟수를 반환하는 DDL(데이터 정의 언어) 및 DML(데이터 조작 언어) 문만 일괄 처리의 일부로 실행할 수 있습니다.

executeBatch 메서드는 각 명령의 업데이트 횟수에 해당하는 int 값 배열을 반환합니다. 명령 중 하나가 실패하면 BatchUpdateException이 발생하고 BatchUpdateException 클래스의 getUpdateCounts 메서드를 사용하여 업데이트 횟수 배열을 검색해야 합니다. 명령 하나가 실패하더라도 드라이버는 계속해서 나머지 명령을 처리합니다. 그러나 명령에 구문 오류가 있으면 일괄 처리의 문이 실패합니다.

참고 항목

업데이트 횟수를 사용할 필요가 없다면 SET NOCOUNT ON 문을 SQL Server로 먼저 발급할 수 있습니다. 이렇게 하면 네트워크 트래픽이 줄어들고 응용 프로그램 성능이 향상됩니다.

그 예로 AdventureWorks2022 샘플 데이터베이스에 다음 테이블을 만듭니다.

CREATE TABLE TestTable
   (Col1 int IDENTITY,
    Col2 varchar(50),
    Col3 int);

다음 예제에서는 AdventureWorks2022 샘플 데이터베이스에 대해 열린 연결을 함수로 전달하며, addBatch 메서드를 사용하여 실행할 명령문을 만들고, executeBatch 메서드를 호출하여 일괄 처리를 데이터베이스로 전송합니다.

public static void executeBatchUpdate(Connection con) {
   try {
      Statement stmt = con.createStatement();
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
      int[] updateCounts = stmt.executeBatch();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

참고 항목

JDBC 드라이버와 함께 문 사용