Oracle JDBC-dokumentationen siger:
Hvis nøglekolonner ikke er eksplicit angivet, kan Oracle JDBC-drivere ikke identificere, hvilke kolonner der skal hentes. Når et kolonnenavn eller kolonneindeksarray bruges, kan Oracle JDBC-drivere identificere, hvilke kolonner der indeholder autogenererede nøgler, som du vil hente. Men når Statement.RETURN_GENERATED_KEYS
heltalsflag bruges, kan Oracle JDBC-drivere ikke identificere disse kolonner. Når heltalsflaget bruges til at angive, at autogenererede nøgler skal returneres, vises ROWID
pseudo kolonne returneres som nøgle. ROWID
kan derefter hentes fra ResultSet
objekt og kan bruges til at hente andre kolonner.
Du angiver ikke kolonnerne (som vist i deres eksempelkode), så du henter ROWID
; forsøger at få det med getInt()
forårsager den fejl, du ser. (Jeg ser faktisk Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
men jeg tror, det skyldes en anden driverversion).
Du skal angive den kolonne, der får den automatisk genererede værdi. Hvis det hedder MEETING_ID
så ville du gøre:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... passerer rækken af kolonner - kun én i dette tilfælde - i stedet for RETURN_GENERATED_KEYS-flaget.
rs.getInt(1)
vil derefter hente den numeriske værdi.