Ich versuche, die zuletzt eingefügte Zeilen-ID beim Einfügen mit JDBC vorbereiteten Anweisungen zu erhalten. Ich habe eine Autoinkrement-Primärschlüsselspalte als Identitätsspalte in der Tabelle. Mein Code ist unten:
%Vor%Wenn ich diese Zeile lösche, habe ich diesen Fehler nicht bekommen:
%Vor%Aber nach dem googlen scheint es ok zu sein mit diesem Code, der mir die letzte eingefügte Zeilen-ID zurückgeben soll.
Tabellenbeschreibung:
%Vor%Die Oracle JDBC-Dokumentation lautet:
Wenn Schlüsselspalten nicht explizit angegeben werden, können Oracle JDBC-Treiber nicht ermitteln, welche Spalten abgerufen werden müssen. Wenn ein Spaltenname oder ein Spaltenindexarray verwendet wird, können Oracle JDBC-Treiber identifizieren, welche Spalten automatisch generierte Schlüssel enthalten, die Sie abrufen möchten. Wenn das Flag
Statement.RETURN_GENERATED_KEYS
integer verwendet wird, können Oracle JDBC-Treiber diese Spalten jedoch nicht identifizieren. Wenn das Integer-Flag verwendet wird, um anzugeben, dass automatisch generierte Schlüssel zurückgegeben werden sollen, wird die Pseudo-SpalteROWID
als Schlüssel zurückgegeben. DerROWID
kann dann vom ObjektResultSet
abgerufen und zum Abrufen anderer Spalten verwendet werden.
Sie geben die Spalten nicht an (wie in ihrem Beispielcode gezeigt), damit Sie ROWID
; Der Versuch, 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 tun Sie:
... übergibt das Array von Spalten - in diesem Fall nur eines - anstelle des RETURN_GENERATED_KEYS-Flags.
Der rs.getInt(1)
wird dann diesen numerischen Wert abrufen.