Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

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

  • Autor

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

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?

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

  • Autor
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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.