De Oracle JDBC-documentatie zegt:
Als sleutelkolommen niet expliciet worden aangegeven, kunnen Oracle JDBC-stuurprogramma's niet identificeren welke kolommen moeten worden opgehaald. Wanneer een kolomnaam of kolomindexarray wordt gebruikt, kunnen Oracle JDBC-stuurprogramma's identificeren welke kolommen automatisch gegenereerde sleutels bevatten die u wilt ophalen. Wanneer echter de
Statement.RETURN_GENERATED_KEYS
integer-vlag wordt gebruikt, kunnen Oracle JDBC-stuurprogramma's deze kolommen niet identificeren. Wanneer de integer-vlag wordt gebruikt om aan te geven dat automatisch gegenereerde sleutels moeten worden geretourneerd, wordt deROWID
pseudo-kolom wordt geretourneerd als sleutel. DeROWID
kan vervolgens worden opgehaald uit deResultSet
object en kan worden gebruikt om andere kolommen op te halen.
U specificeert de kolommen niet (zoals weergegeven in hun voorbeeldcode), dus u haalt de ROWID
op; proberen om dat te krijgen met getInt()
veroorzaakt de fout die u ziet. (Ik zie eigenlijk Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
maar ik denk dat dat te maken heeft met een andere driverversie).
U moet de kolom opgeven die de automatisch gegenereerde waarde krijgt. Als het MEETING_ID
. heet dan zou je doen:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... de reeks kolommen doorgeven - in dit geval slechts één - in plaats van de RETURN_GENERATED_KEYS-vlag.
De rs.getInt(1)
zal dan die numerieke waarde ophalen.