Die Oracle JDBC-Dokumentation sagt:
Wenn Schlüsselspalten nicht explizit angegeben werden, können Oracle JDBC-Treiber nicht erkennen, welche Spalten abgerufen werden müssen. Wenn ein Spaltenname oder ein Spaltenindexarray verwendet wird, können Oracle JDBC-Treiber erkennen, welche Spalten automatisch generierte Schlüssel enthalten, die Sie abrufen möchten. Wenn jedoch Statement.RETURN_GENERATED_KEYS
Integer-Flag verwendet wird, können Oracle JDBC-Treiber diese Spalten nicht identifizieren. Wenn das Integer-Flag verwendet wird, um anzugeben, dass automatisch generierte Schlüssel zurückgegeben werden sollen, wird die ROWID
Pseudo-Spalte wird als Schlüssel zurückgegeben. Die ROWID
kann dann aus dem ResultSet
geholt werden Objekt und kann verwendet werden, um andere Spalten abzurufen.
Sie geben die Spalten nicht an (wie in ihrem Beispielcode gezeigt), also rufen Sie die ROWID
ab; versuchen, das mit getInt()
zu bekommen verursacht den Fehler, den Sie sehen. (Ich sehe tatsächlich Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
aber ich denke das liegt an einer anderen Treiberversion).
Sie müssen die Spalte angeben, die den automatisch generierten Wert erhält. Wenn es MEETING_ID
heißt dann würden Sie Folgendes tun:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... Übergeben des Arrays von Spalten - in diesem Fall nur eine - anstelle des RETURN_GENERATED_KEYS-Flags.
Der rs.getInt(1)
wird dann diesen numerischen Wert abrufen.