programing

오라클에서 JDBC 배치 삽입에서 생성된 키를 가져오는 방법은 무엇입니까?

cafebook 2023. 9. 10. 12:40
반응형

오라클에서 JDBC 배치 삽입에서 생성된 키를 가져오는 방법은 무엇입니까?

저는 JDBC batch inserts를 이용하여 많은 레코드를 삽입하고 있습니다.각각의 기록에 대해 생성된 키를 얻을 수 있는 방법이 있습니까?사용해도 됩니까?ps.getGeneratedKeys()일괄 삽입으로?

사용중입니다oracle.jdbc.OracleDriver

final String insert = "Insert into Student(RollNumber, Name, Age) values(StudentSEQ.nextval, ? , ?)";
final int BATCH_SIZE = 998;
int count = 0;
Connection con = null;
PreparedStatement ps =  null;
try {
    con = getConnection();
    ps = con.prepareStatement(insert);
    for (Student s : students) {
        ps.setString(1, s.getName());
        ps.setInt(2, s.getAge());
        ps.addBatch();
        count++;
        if (count % BATCH_SIZE == 0) {
        // Insert records in batches
            ps.executeBatch();
        }
    }
    // Insert remaining records
    ps.executeBatch();
} finally {
    if(ps != null)
        ps.close();
    release(con);
}

사용할까 합니다.ps.executeUpdate()와 함께ps.getGeneratedKeys()원하는 결과를 얻기 위해 루프 내부로 이동합니다.다른 해결책은 없습니까?

JDBC 4.1 규격의 섹션 13.6 자동 생성검색에는 다음과 같이 나와 있습니다.

다음과 같은 사항에 대해 구현이 정의되어 있습니다.getGeneratedKeys를 호출한 후 생성된 값을 반환합니다.executeBatch방법.

따라서 드라이버가 배치 업데이트를 위해 실제로 지원하는지 확인해야 합니다.Philip O.의 답변에서 알 수 있듯이 생성된 키의 검색은 Oracle 12 JDBC Standards Support에 문서화된 배치 업데이트와 함께 지원되지 않습니다.

자동 생성된 키를 배치 업데이트와 결합할 수 없습니다.

어떤 경우든 운전자가 이를 지원하는 경우에는 아래 코드로 변경하여 운전자에게 생성된 키를 검색하도록 지시해야 합니다.

ps = con.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);

참고: Oracle이 다음 키를 반환하므로 생성된 다른 키 준비 메서드(prepareStatement(sql, columnIndexes)또는 ) 중 하나를 사용해야 할 수 있습니다.ROW_ID예를 들어 본 방법으로 말입니다.

Oracle 12c는 다음 페이지에 따라 자동 생성된 키를 배치 업데이트와 결합하는 것을 지원하지 않는 것으로 나타납니다.

http://docs.oracle.com/cd/E16655_01/java.121/e17657/jdbcvers.htm

"자동 생성 키 검색" 섹션의 "제한 사항" 항목을 참조하십시오.

언급URL : https://stackoverflow.com/questions/15684297/how-to-get-generated-keys-from-jdbc-batch-insert-in-oracle

반응형