나는 auto-generate-key로 정의 된 하나의 컬럼을 가진 테이블을 가지고있다. 다음 코드를 실행하면 새 키가 생성 될 것으로 예상되지만 그렇지 않습니다. 한 행이 삽입되었지만 ps.getGeneratedKeys()
의 ResultSet은 비어 있습니다.getGeneratedKeys()가 INSERT 다음에 결과를 반환하지 않는 이유는 무엇입니까?
DB2 : SQLLIB_ADCL_V97FP1을 사용 중입니다.
conn = getConnection();
conn.setAutoCommit(false);
String query =
"INSERT INTO MyTable " +
" (messe_nr, land5, variable_nr, bezeichnung_en, bezeichnung_de) " +
"VALUES (?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
ps.setInt(1, fair.getFairId());
ps.setString(2, variable.getCountryCode());
ps.setInt(3, variable.getSort());
ps.setString(4, variable.getLabel_en());
ps.setString(5, variable.getLabel_de());
log.debug(query);
int count = ps.executeUpdate();
if(count == 1) {
ResultSet rs = ps.getGeneratedKeys();
if(rs.next()) {
variable.setId(rs.getBigDecimal(1).intValue());
} else {
log.error("Could not get autogen key after variable insert");
throw new AVMSException(1500);
}
rs.close();
}
log.debug("inserted " + count);
ps.close();
conn.commit();
UPDATE는
난 그냥 테스트 서버에 프로젝트를 배포하고 문제가 발생하지 않습니다. 내 개발 시스템에 문제가 생겼다. 그러나 무엇? 1.7.0_13의 Java 업데이트를 설치했는데 이런 문제가 발생할 수 있습니다. - /?
은 당신이'CREATE' 문을 공유 할 수' – Bulat
@Bulat을 MyTable' - 나는에 직접 액세스 할 수없는 ** CREATE ** . 나는 VARIABLE_ID가 자동으로 생성 된 키라는 것을 확인한 관리자들에게 확인했다. – paul
값이 실제로 생성되고 있는지 확인할 수 있습니까? 또한 getGeneratedKeys() 필드의 이름을 전달할 수 있고 그 경우에 무슨 일이 일어나는 지 확인할 수있을 것 같아요. – Bulat