Herausfinden des Primary Keys nach INSERT-Kommando?

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi Forum!

Habe folgendes Problem: Ich füge in eine DB (postgreSQL 8.2) mittels INSERT Kommando einen Datensatz ein, dessen Primary Key aber von der Datenbank (als aufsteigende Nummer) generiert wird. Also etwa sowas:

INSERT INTO kunden (name, vorname) VALUES ('Grabowski','Karl-Heinz');

In der DB steht dann halt sowas wie:

455 | Grabowski | Karl-Heinz

wobei ich aber die 455 nicht explizit gesetzt habe;diese wurde durch eine serial (einen autocount) gesetzt.
Bei einem INSERT Kommando bekomme ich aber lediglich ein "false" zurück, wenn ich

Code:
Statement s.execute("INSERT INTO kunden (name, vorname) VALUES ('Grabowski','Karl-Heinz');")

ausführe, was bekanntlich bedeutet, dass es kein ResultSet gibt.

Weiss jemand, ob es bei diesem Problem eine Möglichkeit gibt den kompletten eingefügten Datensatz zu erhalten ohne nach allen eingefügten Werten zu fragen? Das wäre dann die Brute-Force Methode, aber Fehleranfällig und äußerst unschön...

Liebe Grüße
Tim
 
Hi Tim,
schau Dir mal Statement#getGeneratedKeys() an.
Dies muss der jdbc-treiber aber unterstützen (ob Postgres 8 dast tut kann ich net sagen)

hth
 
du kannst das ganze in einer transaktion laufen lassen (setAutocommit(false)). In dieser kannst du dann, nach dem insert nach dem aktuell größten wert der sequence fragen et voilà sollte als ergebnis deine id rauskommen.

das commit am ende der transaktion aber nicht vergessen
 
hi tim,

das problem hatten hier schon mehrere (ich unter anderem auch hier auf der arbeit). leider wird vom postgres-treiber das zurückliefern der id nicht unterstützt (was ich sehr schwach finde). wenn du googelst findest du irgendwann dazu einen post im postgresql forum (englisch).
also mußt du wohl einen select nextval auf deine sequenz machen und sie dir dann merken bzw. diese id für den insert dann direkt verwenden.
 
Tom299 hat gesagt.:
leider wird vom postgres-treiber das zurückliefern der id nicht unterstützt (was ich sehr schwach finde).

Ja, in der Tat.

Vielen Dank für Eure Hinweise! Werde dann wohl das mit dem select nextval aufruf der Sequenz versuchen.

Grüße
Tim
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben