2013-01-11 5 views
0

java.sql 준비된 일괄 처리 실행을 통해 여러 개의 테이블 (최대 20 개)을 만들려고합니다. 대부분의 테이블은 서로 관련이 있습니다. 그러나 내 마음에는 혼란이 있습니다.일괄 처리 준비 완료된 문 자동 커밋

1) 연결 자동 커밋을 true 또는 false로 설정 하시겠습니까? 2) BatchExecute에 대한 특별한 패턴이 있습니까? 아래로 위로 좋아해. 내가 부모 테이블에 쿼리를 먼저 실행해야합니다 만들 싶습니다. 3) 오류가 발생하면 모든 배치가 롤백됩니까?

+0

나는 모든 RDBMS 데이터 정의 언어가 트랜잭션에서 수행 될 수 없다는 것을 이해하고 있습니다. –

+1

이것은 흥미로운 일입니다. 이 모든 것을 다시 롤백하려면 autocommit을 false로 설정해야합니다. 그러나 이와 같은 데이터베이스 카탈로그를 사용하면 문제가 발생할 수 있습니다. – BevynQ

+0

그래서 테이블을 만드는 더 좋은 방법. 나에게 제안 해주세요. –

답변

0

자동 커밋을 사용한 일괄 실행 동작은 구현에 따라 정의되며, 일부 드라이버는이를 지원하지 않을 수도 있습니다. 따라서 배치 실행을 사용하려면 자동 커밋을 false로 설정하십시오. 즉, 일부 데이터베이스는 각 DDL 문을 암시 적으로 커밋합니다. 이는 일괄 실행의 올바른 작동을 방해 할 수 있습니다. 안전한 경로를 사용하고 DDL에 대해 일괄 실행을 사용하지 말고 DDL을 실행하는 데 보통 Statementexecute(String)을 사용하는 것이 좋습니다.

0

실제로이 경우 배치 실행을 사용하는 것은 의미가 없습니다. 배치 실행은 한 번에 수천 개의 행을 삽입하거나 업데이트 할 때 (큰) 성능 향상을 제공합니다. 당신은 트랜잭션 내의 모든 명령문이 필요합니다 :

  • 가 Statement.executeUpdate와
  • 전화 Connection.commit()를 당신의 생성 테이블 문을 실행 (false)를

    1. 전화 Connection.setAutoCommit을

    외부 테이블 키를 기반으로 테이블 작성 명령문을 직접 주문해야합니다. Mark가 지적한 바와 같이, 사용중인 DB가 각 작성 테이블을 즉시 커밋하고 트랜잭션을 무시할 수 있습니다. 모든 DB가 테이블의 트랜잭션 생성을 지원하는 것은 아닙니다. 이 부분을 테스트하거나이 부분에 대해 좀 더 연구해야합니다.