Pinhead Geschrieben 29. September 2005 Geschrieben 29. September 2005 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. Zitieren
_Arvid_ Geschrieben 29. September 2005 Geschrieben 29. September 2005 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. Zitieren
ExAzubi Geschrieben 6. Oktober 2005 Geschrieben 6. Oktober 2005 Zur Not mit der Relativen Satznummer der DB arbeiten, nicht schön, aber dadür klappt es. Zitieren
Morbid_Soul Geschrieben 7. Oktober 2005 Geschrieben 7. Oktober 2005 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 Zitieren
Pinhead Geschrieben 7. Oktober 2005 Autor Geschrieben 7. Oktober 2005 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 Zitieren
Jaraz Geschrieben 7. Oktober 2005 Geschrieben 7. Oktober 2005 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? Zitieren
Krain Geschrieben 7. Oktober 2005 Geschrieben 7. Oktober 2005 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 Zitieren
Pinhead Geschrieben 7. Oktober 2005 Autor Geschrieben 7. Oktober 2005 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 Zitieren
Empfohlene Beiträge
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.