jdbcTemplate 일괄 업데이트 batchUpdate () 방법 에 대한 반환 값 은 - 2 입 니 다.

원문: Oracle 의 업데이트 카운트 표준 배치 구현 문장 배치 가 성공 적 으로 처리 되면 문장 실행 배치 호출 에 의 해 반환 되 는 정수 배열 또는 업데이트 카운트 배열 에는 항상 각 작업 에 대해 하나의 요소 가 있 습 니 다. 표준 업데이트 배치 의 오 라 클 구현 시, the values of the array elements are as follows:
For a prepared statement batch, it is not possible to know the number of rows affected in the database by each individual statement in the batch. Therefore, all array elements have a value of -2. According to the JDBC 2.0 specification, a value of -2 indicates that the operation was successful but the number of rows affected is unknown.
For a generic statement batch, the array contains the actual update counts indicating the number of rows affected by each operation. The actual update counts can be provided only in the case of generic statements in the Oracle implementation of standard batching.
For a callable statement batch, the server always returns the value 1 as the update count, irrespective of the number rows affected by each operation.
In your code, upon successful processing of a batch, you should be prepared to handle either -2, 1, or true update counts in the array elements. For a successful batch processing, the array contains either all -2, 1, or all positive integers.
Example 23-2 illustrates the use of standard update batching.
Example 23-2 Standard Update Batching
This example combines the sample fragments in the previous sections, accomplishing the following steps:
Disabling auto-commit mode, which you should always do when using either update batching model
Creating a prepared statement object
Adding operations to the batch associated with the prepared statement object
Processing the batch
Committing the operations from the batch
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();
...

You can process the update counts array to determine if the batch processed successfully.
Error Handling in the Oracle Implementation of Standard Batching If any one of the batched operations fails to complete successfully or attempts to return a result set during an executeBatch call, then the processing stops and a java.sql.BatchUpdateException is generated.
After a batch exception, the update counts array can be retrieved using the getUpdateCounts method of the BatchUpdateException object. This returns an int array of update counts, just as the executeBatch method does. In the Oracle implementation of standard update batching, contents of the update counts array are as follows, after a batch is processed:
For a prepared statement batch, it is not possible to know which operation failed. The array has one element for each operation in the batch, and each element has a value of -3. According to the JDBC 2.0 specification, a value of -3 indicates that an operation did not complete successfully. In this case, it was presumably just one operation that actually failed, but because the JDBC driver does not know which operation that was, it labels all the batched operations as failures.
You should always perform a ROLLBACK operation in this situation.
For a generic statement batch or callable statement batch, the update counts array is only a partial array containing the actual update counts up to the point of the error. The actual update counts can be provided because Oracle JDBC cannot use true batching for generic and callable statements in the Oracle implementation of standard update batching.
For example, if there were 20 operations in the batch, the first 13 succeeded, and the 14th generated an exception, then the update counts array will have 13 elements, containing actual update counts of the successful operations.
You can either commit or roll back the successful operations in this situation, as you prefer.
In your code, upon failed processing of a batch, you should be prepared to handle either -3 or true update counts in the array elements when an exception occurs. For a failed batch processing, you will have either a full array of -3 or a partial array of positive integers.
Intermixing Batched Statements and Nonbatched Statements You cannot call executeUpdate for regular, nonbatched processing of an operation if the statement object has a pending batch of operations.
However, you can intermix batched operations and nonbatched operations in a single statement object if you process nonbatched operations either prior to adding any operations to the statement batch or after processing the batch. Essentially, you can call executeUpdate for a statement object only when its update batch is empty. If the batch is non-empty, then an exception will be generated.
For example, it is valid to have a sequence, such as the following:
...
PreparedStatement pstmt = 
          conn.prepareStatement("INSERT INTO employees VALUES(?, ?)");

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

int scount = pstmt.executeUpdate();   // OK; no operations in pstmt batch

pstmt.setInt(1, 3000);
pstmt.setString(2, "Sulu Simpson");
pstmt.addBatch();                    // Now start a batch

pstmt.setInt(1, 4000);
pstmt.setString(2, "Stan Leland");
pstmt.addBatch();

int[] bcounts = pstmt.executeBatch();

pstmt.setInt(1, 5000);
pstmt.setString(2, "Amy Feiner");

int scount = pstmt.executeUpdate();   // OK; pstmt batch was executed
...

Intermixing nonbatched operations on one statement object and batched operations on another statement object within your code is permissible. Different statement objects are independent of each other with regard to update batching operations. A COMMIT request will affect all nonbatched operations and all successful operations in processed batches, but will not affect any pending batches.
原 文: 표준 일괄 처리 Oracle 구현 에서 업데이트 계수 가 구문 일괄 처리 에 성공 하면 구문 executeBatch 에서 되 돌아 오 는 정수 배열 이나 update 계수 배열 은 일괄 처리 중의 모든 작업 에 하나의 요 소 를 제공 합 니 다.표준 업데이트 일괄 처리 Oracle 구현 에서 배열 요소 의 값 은 다음 과 같 습 니 다.
준 비 된 문장 일괄 처리 에 있어 서 이 일괄 처리 중의 모든 문장 이 데이터베이스 에 영향 을 미 치 는 줄 수 를 알 수 없습니다.따라서 모든 배열 요소 의 값 은 - 2 입 니 다.JDBC 2.0 규범 에 따 르 면 값 은 - 2 로 조작 성공 을 나타 내 지만 영향 을 받 는 줄 수 는 알 수 없다.
일반적인 구문 일괄 처리 에 있어 서 이 배열 은 실제 update 수 를 포함 하여 모든 작업 에 영향 을 주 는 줄 수 를 표시 합 니 다.표준 일괄 처 리 된 Oracle 구현 에서 만 실제 업데이트 수 를 제공 할 수 있 습 니 다.
호출 가능 한 구문 일괄 처리 에 대해 서버 는 항상 값 1 을 업데이트 계수 로 되 돌려 주 며 모든 작업 에 영향 을 미 치 는 줄 수 를 고려 하지 않 습 니 다.
코드 에서 일괄 처 리 를 성공 적 으로 처리 할 때 배열 요소 의 - 2, 1 또는 실제 업데이트 수 를 처리 할 준 비 를 해 야 합 니 다.성공 적 인 일괄 처리 에 대해 이 배열 은 모든 - 2, 1 또는 모든 정수 가 포함 되 어 있다.
예제 23 - 2 는 표준 업데이트 일괄 처리 의 사용 을 보 여 주 었 다.
예시 23 - 2 표준 업데이트 일괄 처리
이 예 는 앞의 몇 절 중의 예제 부분 을 결합 하여 다음 과 같은 절 차 를 완성 했다.
자동 제출 모드 를 사용 하지 않 습 니 다. 일괄 처리 모델 을 업데이트 할 때 항상 이렇게 해 야 합 니 다.
준 비 된 구문 대상 만 들 기
준 비 된 구문 대상 과 연 결 된 일괄 처리 에 작업 을 추가 합 니 다.
처리 일괄 처리
일괄 처리 에서 작업 제출
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();
...

일괄 처리 가 성공 적 으로 처리 되 었 는 지 확인 하기 위해 서 업데이트 계수 그룹 을 처리 할 수 있 습 니 다.
표준 일괄 처 리 된 Oracle 구현 에서 의 오류 처 리 는 일괄 처리 작업 이 실 패 했 거나 executeBatch 호출 과정 에서 결과 집합 을 되 돌려 보 려 고 시도 하면 처리 가 중 단 됩 니 다. 자바. sql.BatchUpdateException 생 성.
일괄 처리 이상 후 BatchUpdateException 대상 의 getupdatec 인양 방법 으로 업데이트 계수 그룹 을 검색 할 수 있 습 니 다.이것 은 executeBatch 방법 처럼 int 배열 의 update 수 를 되 돌려 줍 니 다.표준 업데이트 일괄 처리 의 Oracle 실현 에서 계수 배열 을 업데이트 하 는 내용 은 다음 과 같 습 니 다. 일괄 처 리 를 처리 한 후에:
준 비 된 구문 일괄 처 리 는 어떤 조작 이 실 패 했 는 지 알 수 없다.이 배열 은 일괄 처리 에서 모든 작업 에 하나의 요소 가 있 고 모든 요소 의 값 은 - 3 이다.JDBC 2.0 규범 에 따 르 면 3 - 3 의 값 은 조작 이 성공 적 으로 이 루어 지지 않 았 음 을 나타 낸다.이 경우 한 가지 조작 만 실 패 했 을 수 있 지만 JDBC 드라이버 가 어떤 조작 인지 모 르 기 때문에 모든 일괄 처리 작업 을 실패 로 표시 합 니 다.
이런 상황 에서, 당신 은 시종 스크롤 백 작업 을 실행 해 야 합 니 다.
일반적인 구문 일괄 처리 나 호출 가능 한 구문 일괄 처리 에 대해 update 계수 그룹 은 실제 업데이트 수 를 오류 점 으로 포함 하 는 부분 배열 일 뿐 입 니 다.Oracle JDBC 는 표준 업데이트 일괄 처리 Oracle 구현 에서 실제 일괄 처리 와 호출 가능 한 문 구 를 사용 할 수 없 기 때문에 실제 업데이트 수 를 제공 할 수 있 습 니 다.
예 를 들 어 일괄 처리 에서 20 개의 조작 이 있 고 13 번 째 성공, 14 번 째 이상 이 생 성 되면 update 계수 그룹 은 13 개의 요 소 를 포함 하 며 성공 적 인 작업 의 실제 업데이트 수 를 포함 합 니 다.
원 하 는 대로 제출 하거나 스크롤 백 에 성공 할 수 있 습 니 다.
코드 에서 일괄 처리 가 실 패 했 을 때 이상 이 발생 했 을 때 배열 요소 의 - 3 또는 실제 업데이트 수 를 처리 할 준 비 를 해 야 합 니 다.실패 한 일괄 처리 에 대해 서 는 완전한 - 3 또는 정수 부분 배열 이 있 을 것 입 니 다.
혼합 일괄 처리 구문 과 비 일괄 처리 문 구 는 구문 대상 이 처리 해 야 할 작업 이 있 으 면 execute Update 를 호출 하여 일반적인 비 일괄 처리 작업 을 할 수 없습니다.
단, 비 일괄 처리 작업 을 처리 하거나 구문 일괄 처리 나 일괄 처리 에 작업 을 추가 하기 전에 일괄 처리 작업 과 비 일괄 처리 작업 을 한 구문 대상 에 혼합 할 수 있 습 니 다.본질 적 으로 업데이트 가 비어 있 을 때 만 구문 대상 에 execute Update 를 호출 할 수 있 습 니 다.일괄 처리 가 비어 있 지 않 으 면 이상 이 생 길 수 있 습 니 다.
예 를 들 어 하나의 서열 은 유효 하 다. 예 를 들 어 다음 과 같다.
...
PreparedStatement pstmt = 
          conn.prepareStatement("INSERT INTO employees VALUES(?, ?)");

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

int scount = pstmt.executeUpdate();   // OK; no operations in pstmt batch

pstmt.setInt(1, 3000);
pstmt.setString(2, "Sulu Simpson");
pstmt.addBatch();                    // Now start a batch

pstmt.setInt(1, 4000);
pstmt.setString(2, "Stan Leland");
pstmt.addBatch();

int[] bcounts = pstmt.executeBatch();

pstmt.setInt(1, 5000);
pstmt.setString(2, "Amy Feiner");

int scount = pstmt.executeUpdate();   // OK; pstmt batch was executed
...

원본 주소:https://docs.oracle.com/cd/B28359_01/java.111/b31224/oraperf.htm#CHDCBHEC

좋은 웹페이지 즐겨찾기