programing

ExecuteBatch 메서드가 Java에서 값 -2의 배열을 반환합니다.

javamemo 2023. 6. 9. 21:41
반응형

ExecuteBatch 메서드가 Java에서 값 -2의 배열을 반환합니다.

java에서 executeBatch 메소드를 실행하면 int 배열을 반환합니다. int 배열은 정상이지만 값은 모든 배열 요소의 -2입니다.

영향을 받는 행의 수를 나타내는 0 또는 +ve 숫자여야 하지만 -2를 반환합니다.

데이터베이스에서 확인했을 때 모든 업데이트가 성공적으로 완료되었습니다. 이 -2의 의미와 영향을 받는 행 수를 어떻게 찾는지 설명해 주십시오.

감사합니다, 디페쉬 유니얄

jdbc-spec에는 배치 업데이트의 반환 코드에 대해 다음과 같은 내용이 있습니다.

0 이상 - 명령이 성공적으로 처리되었으며 값은 명령 실행의 영향을 받은 데이터베이스의 행 수를 나타내는 업데이트 횟수입니다. 14장 배치 업데이트 121

진술서.SUCCESS_NO_INFO — 명령이 성공적으로 처리되었지만 영향을 받는 행 수를 알 수 없습니다.

진술.SUCCESS_NO_INFO는 -2로 정의되므로 결과에 따르면 모든 것이 정상적으로 작동했지만 업데이트된 열 수에 대한 정보는 얻을 수 없습니다.

오라클 문서에는 다음과 같은 내용이 있습니다.

준비된 문 배치의 경우 배치의 각 개별 문에 의해 데이터베이스에 영향을 받는 행 수를 알 수 없습니다.따라서 모든 배열 요소의 값은 -2입니다.JDBC 2.0 사양에 따르면 -2 값은 작업이 성공했지만 영향을 받는 행 수를 알 수 없음을 나타냅니다.

일반 문 배치의 경우 배열에는 각 작업의 영향을 받는 행 수를 나타내는 실제 업데이트 수가 포함됩니다.실제 업데이트 횟수는 Oracle 표준 배치 구현에 포함된 일반 문의 경우에만 제공할 수 있습니다.

호출 가능한 문 배치의 경우 서버는 각 작업의 영향을 받는 행 수에 관계없이 항상 값 1을 업데이트 횟수로 반환합니다.

횟수가 수 없는 .PreparedStatement하지만 다시 평범한 상태로 돌아가야 합니다.Statements의

값이 -2이면 요소가 성공적으로 처리되었지만 영향을 받는 행 수를 알 수 없음을 나타냅니다.

스펙

Oracle 12c는 더 이상 그렇지 않습니다.

준비된 문 배치의 경우 배열에는 각 작업의 영향을 받는 행 수를 나타내는 실제 업데이트 수가 포함됩니다.

https://docs.oracle.com/database/121/JJDBC/oraperf.htm#JJDBC28773 을 참조하십시오.

표준 업데이트 배치...

conn.setAutoCommit(false);

PreparedStatement pstmt = 
          conn.prepareStatement("INSERT INTO employees VALUES(?, ?)");

pstmt.setInt(1, 2000);
pstmt.setString(2, "Milo Mumford");
pstmt.addBatch();

pstmt.setInt(1, 3000);
pstmt.setString(2, "Sulu Simpson");
pstmt.addBatch();

int[] updateCounts = pstmt.executeBatch();

conn.commit();

pstmt.close();
...

업데이트 횟수 배열을 처리하여 배치가 성공적으로 처리되었는지 확인할 수 있습니다.

Batching 기능
배치된 작업 중 하나가 성공적으로 완료되지 않거나 executeBatch 호출 중에 결과 집합을 반환하려고 하면 처리가 중지되고 java.sql이 표시됩니다.BatchUpdateException이(가) 있습니다.

배치 예외 후에는 BatchUpdateException 개체의 getUpdateCounts 메서드를 사용하여 업데이트 횟수 배열을 검색할 수 있습니다.executeBatch 메서드와 마찬가지로 업데이트 횟수의 int 배열을 반환합니다.표준 업데이트 배치의 Oracle 구현에서 업데이트 횟수 배열의 내용은 배치가 처리된 후 다음과 같습니다.

  • 준비된 문 배치의 경우 배치 실행 사이에 오류가 발생할 경우 executeBatch 메서드는 값을 반환할 수 없으며 대신 BatchUpdateException을 슬로우합니다.이 경우 예외 자체는 크기가 n인 int 배열을 데이터로 사용합니다. 여기서 n은 성공적인 레코드 실행 수입니다.예를 들어, 배치 크기가 5이고 4번째 레코드에서 오류가 발생하면 BatchUpdateException의 크기는 3(3개의 레코드가 성공적으로 실행됨)이며 배열의 각 항목은 각 레코드의 영향을 받은 행 수를 나타냅니다.

  • 문 또는 문 배치의 경우 은 실제 .
    오류 지점까지 카운트됩니다. Oracle 가능한 수 업데이트 할 수 있습니다.
    일괄 처리

예를 들어, 배치에 20개의 작업이 있었는데 처음 13개가 성공하고 14번째가 예외를 생성한 경우 업데이트 횟수 배열에는 성공한 작업의 실제 업데이트 횟수가 포함된 13개의 요소가 포함됩니다.

이 경우 원하는 대로 성공적인 작업을 커밋하거나 롤백할 수 있습니다.

코드에서 배치 처리에 실패하면 예외가 발생할 때 배열 요소에서 -3 또는 실제 업데이트 수를 처리할 준비가 되어 있어야 합니다.배치 처리가 실패한 경우 -3의 전체 배열 또는 양의 정수 부분 배열이 됩니다.

언급URL : https://stackoverflow.com/questions/19022175/executebatch-method-return-array-of-value-2-in-java

반응형