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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...