2011-11-17 1 views
3

executeBatch 업데이트는 실행 중 하나에서 실패한 경우 나머지 명령 실행을 계속하지 않습니다. 명령이 실행되지 않아도 나머지 명령이 성공적으로 실행되는 executeBatch에 대한 대안이나 대안이 있습니까? executeUpdate를 사용하지 않는 것은 많은 시간이 걸리고 질의를 하나씩 실행하기 때문입니다.다른 오류 처리 기능을 가진 jdbc에서 executeBatch를 사용 하시겠습니까?

답변

2

설명서에 다음이 표시됩니다.

일괄 업데이트 작업 중에 오류가 발생하면 예외가 throw됩니다. BatchUpdateException은 SQLException이 제공하는 정보 외에도 일괄 업데이트 중에 성공적으로 실행 된 모든 명령, 즉 오류가 발생하기 전에 실행 된 모든 명령에 대해 업데이트 을 계산합니다. 배열의 요소 순서는 명령이 배치에 추가 된 순서와 일치합니다. 일괄 업데이트의 명령이 제대로 실행되지 않고 BatchUpdateException이 으로 Throw되면 드라이버는 일괄 처리의 나머지 명령을 계속 처리 할 수도 있고하지 않을 수도 있습니다. 오류 발생 후 드라이버가 계속 처리되면 BatchUpdateException.getUpdateCounts 메서드가 반환 한 배열은 오류가 발생하기 전에 성공적으로 실행 된 명령의 요소가 아닌 배치의 모든 명령에 대한 요소를 갖습니다. 드라이버가 명령 처리를 계속하는 경우 어떤 명령의 배열 요소 은 Statement.EXECUTE_FAILED입니다.

내가 이해하는 한, jdbc 드라이버에 따라 다릅니다.

아마도 더 나은 해결책은 문제의 원인을 찾아 수정하는 것일 수 있습니다.

+0

안녕하세요 Alexandr, 답장을 보내 주셔서 감사합니다. – vicky

+0

네,하지만 제가 일하는 프로그램은 수백만 건의 레코드를 삽입합니다. 또한 프로그램 자체가 플로우를 처리하고 실패한 경우 일} 처리 명령의 나머지 부분을 실행할 수 있도록하는 것이 더 나은 오류 처리 기능입니다. jdbc 드라이버는 실패 후 처리를 지원하지 않습니다. 따라서 나는 executeBatch 작업을 수행 할 수있는 대안이나 방법이 필요하다. 고마워요 :) – vicky

+0

만약 당신이 정말로 레코드 수백만을 삽입하려고한다면, db 서버에 데이터를로드 할 수있는 특별한 dabase-vendor 특정 도구를 사용하는 것이 좋습니다. 귀하의 프로그램은 특수 형식의 데이터 만 준비 할 수 있습니다. 그런 다음 선택한 도구를 적용합니다. – Alexandr

관련 문제