# Herausfinden des Primary Keys nach INSERT-Kommando?



## Guest (8. Aug 2007)

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 


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


----------



## yajp (8. Aug 2007)

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


----------



## kasi (8. Aug 2007)

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


----------



## Tom299 (9. Aug 2007)

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.


----------



## Guest (10. Aug 2007)

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


----------

