Oracle JDBC-dokumentationen säger:
Om nyckelkolumner inte uttryckligen anges, kan Oracle JDBC-drivrutiner inte identifiera vilka kolumner som behöver hämtas. När ett kolumnnamn eller kolumnindexmatris används kan Oracle JDBC-drivrutiner identifiera vilka kolumner som innehåller automatiskt genererade nycklar som du vill hämta. Men när
Statement.RETURN_GENERATED_KEYS
heltalsflagga används, Oracle JDBC-drivrutiner kan inte identifiera dessa kolumner. När heltalsflaggan används för att indikera att automatiskt genererade nycklar ska returneras, visasROWID
pseudo kolumn returneras som nyckel.ROWID
kan sedan hämtas frånResultSet
objekt och kan användas för att hämta andra kolumner.
Du anger inte kolumnerna (som visas i deras exempelkod) så du hämtar ROWID
; försöker få det med getInt()
orsakar felet du ser. (Jag ser faktiskt Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
men jag tror att det beror på en annan drivrutinsversion).
Du måste ange kolumnen som får det automatiskt genererade värdet. Om det heter MEETING_ID
då skulle du göra:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... passerar arrayen av kolumner - bara en i det här fallet - snarare än RETURN_GENERATED_KEYS-flaggan.
rs.getInt(1)
kommer då att hämta det numeriska värdet.