1
我有一個表,其中有一列被定義爲自動生成密鑰。當執行下面的代碼時,我期望生成一個新的密鑰,但事實並非如此。插入一行,但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
我剛纔部署的項目,以測試服務器,並不會出現問題。我的開發系統上有些東西壞了 - 但是什麼?我確實在一兩天後安裝了Java更新 - 1.7.0_13 - 會導致這樣的問題: - /?
你能分享'CREATE'語句'MyTable' – Bulat
@Bulat - 我沒有直接訪問** ** CREATE 。我與確認「VARIABLE_ID」是自動生成密鑰的管理員進行了覈對。 – paul
您可以檢查實際生成的值嗎?另外我認爲你可以將字段的名稱傳遞給getGeneratedKeys()並檢查在這種情況下會發生什麼。 – Bulat