Zum Inhalt springen

Rückgabe eines erzeugten Schlüssels bei einem PreparedStatement


Empfohlene Beiträge

Geschrieben

Hallo,

ich erstelle mit einem PreparedStatement einen Datensatz in einer Tabelle. In dieser Tabelle gibt es einen Trigger der mit Hilfe einer Sequence den Primärschlüssel erzeugt. Diesen Schlüssel brauche ich aber im folgenden Programm Code noch für ein Update.

Besteht die Möglichkeit das mir das PreparedStatement diesen Schlüssel zurückgibt oder muss ich mir den Schlüssel mit einem extra Select holen.

Geschrieben

Ich nehme an, du führst das PreparedStatement durch Aufrufen einer der Methoden execute() oder executeUpdate() aus, da du ja nur ein INSERT machst.

Damit wirst du es wohl etwas schwerer haben, glaub ich.

An deiner Stelle würde ich es mal mit der Methode executeQuery() ausprobieren. Da erhälst du als Rückgabe ein ResultSet. Darin befinden sich bespielsweise nach Ausführen eines SELECTs die gefundenen Datensätze. Ich bin mir aber nicht sicher, ob bei einem INSERT auch dein Datensatz darin landet. Denkbar wäre es jedenfalls.

Aus dem ResultSet gelangt man dann recht leicht an die Werte der einzelnen Spalten.

Probier es einfach mal aus. Wie gesagt, bin mir nicht sicher, ob das klappt. Ist aber allemal einen Versuch Wert.

Lies dich auch mal durch die Java API Doc zu PreparedStatement und ResultSet. Dort findest du sicher noch mehr Antworten.

Geschrieben

Hi,

mit welchem DBMS arbeitest du?

Bei SQL-Server zumindest, kannst du über die SQL-Variable (heißt das so?) @@identity die zuletzt erzeugte ID ermitteln. Ich weiß allerdings nicht, ob das auch in anderen DBMS geht.

Gruß, Peter

Geschrieben

Ich nutze Oracle.

Ich habs so gelöst das ich erst ein Insert mache. Dann selektiere ich den höchsten Schlüssel und mit dem mache ich dann mein Update.

Nicht schön aber funktionell :beagolisc

Geschrieben
Ich nutze Oracle.

Ich habs so gelöst das ich erst ein Insert mache. Dann selektiere ich den höchsten Schlüssel und mit dem mache ich dann mein Update.

Nicht schön aber funktionell :beagolisc

Das ganze hoffentlich in einer Transaktion.

Gruß Jaraz

PS: Warum nutzt du keine sequence?

Geschrieben
Ich nutze Oracle.

Ich habs so gelöst das ich erst ein Insert mache. Dann selektiere ich den höchsten Schlüssel und mit dem mache ich dann mein Update.

Nicht schön aber funktionell :beagolisc

Kann aber gefährlich werden, falls mehrere User zeitgleich diesen Vorgang starten.

Bsp.:

User1 fügt ein

User2 fügt ein

User1 holt den höchsten Index (in diesem Fall ist es aber der Index der von User2 ausgeführten Aktion)

Von Oracle habe ich keine Ahnung, aber bei MySQL wird bei einem Insert-Befehl der Primärschlüssel ins Resultset zurückgegeben, wenn ich mich nicht irre.

EDIT: Jaraz war schneller

Geschrieben
Das ganze hoffentlich in einer Transaktion.

Gruß Jaraz

PS: Warum nutzt du keine sequence?

Natürlich in einer Transaktion ;)

Weil ich nicht weiß wie ich eine Sequence nutze werde es aber am Montag raussuchen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...