오라클에서 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
'programing' 카테고리의 다른 글
JQuery.ajax를 사용하여 각 WordPress 게시물에서 썸네일 첨부 파일을 가져오는 방법은 무엇입니까? (0) | 2023.09.15 |
---|---|
mySQL의 전체 테이블에서 문자열 검색 (0) | 2023.09.15 |
본문에서 스크롤 사용 안 함 (0) | 2023.09.10 |
두 개의 데이터 프레임을 결합하고, 한 열에서 모든 열을 선택하고 다른 열에서 일부 열을 선택합니다. (0) | 2023.09.10 |
더 큰 글리폰 (0) | 2023.09.10 |