2014-05-15 2 views
2

나는 i 변수를 사용하여 (100)에 의해 작업을 일괄 분할이 내 첫 배치 JDBC 코드입니다 :jdbc 배치 삽입, 작업 분할 방법

PreparedStatement oraclePs = oracleConn.prepareStatement("insert ..."); 
ResultSet sybaseRs = sybasePs.executeQuery(); 
int i = 1; 
final int step = 100; 
while (sybaseRs.next()) { 
    oraclePs.setDate(1, sybaseRs.getDate("...")); 
    ... 
    oraclePs.addBatch(); 
    if (i++ % step == 0) 
     oraclePs.executeBatch(); 
} 
oraclePs.executeBatch(); 
oraclePs.close(); 
oracleConn.commit(); 

잘 기술인가요?

i이 100 경계에서 끝나면 oraclePs.executeBatch();이 맞지 않습니다.

step을 어떻게 선택합니까? 이외에도

} 
if(i % step != 0) 
    oraclePs.executeBatch(); 

oraclePs.close(); 
oracleConn.commit(); 

: Oracle의 경우 나는 "오라클 SQL 개발자"이 단계와 IDE 가져 오기 CSV ...

답변

1

그것은 당신이 프로세스에 남아 뭔가가 알고있는 경우에 아마 최고의에만 최종 executeBatch을 실행하는 데 있다고 볼 그것은 나에게 좋게 보인다.

step의 값을 찾는 방법은 실제로 사용 사례와 진술의 효과가 데이터베이스에 어떤 영향을 미치는지에 달려 있다고 생각합니다. 다른 값으로 실험 해보면 성능에 어떤 영향을 미치는지 확인할 수 있습니다.

+0

나는 DB를 가지고 꽤 오래 일한 적이 없다. 준비된 성명서를 닫은 후 연결을하는 것이 관례인가? – Ordous

+1

연결 커밋과 준비된 명령문은 독립적이므로 먼저 수행 한 작업은 중요하지 않습니다. PreparedStatement에 연결된 모든 ResultSet은 명령문이 닫히면 사용할 수 없게됩니다. 이 메소드를 여러 x 호출하는 경우 준비된 명령.을 3 시하 고 명령문을 준비하면 즉시 닫지 않는 것이 좋습니다. – StuPointerException