# Primärschlüssel auf Existenz prüfen



## klattiator (20. Dez 2008)

Hallo zusammen,

und zwar würd ich gern wissen wie man in einer db-tabelle prüfen kann, ob ein primärschlüssel bereits vorhanden ist. eigentlich dachte ich ja, es wird eine SQLException geworfen, wenn ich einen Datensatz mit einem primärschlüssel abspeicher, der bereits vorhanden ist, aber offenbar ist dem nicht so...

ich hatte mir überlegt folgende abfrage zu machen:

```
String query = "select BauID FROM Baustellen WHERE BauID='" + bauid + "';";
```
und dann im ResultSet prüfen ob dieses leer ist. ich hab nur nicht rausgekriegt wie ich das prüfen kann...

hat da vielleicht jemand ne idee? oder gibts da noch einen andern weg?


----------



## Guest (20. Dez 2008)

```
ResultSet rs = ...
if( ! rs.next() )
{
   PK nicht vorhanden
}
```

Jetzt mal unabhängig von dem "Wie", wozu brauchst du es? Doch nicht, um PKs zu generieren, oder?
Verwende Sequenzen oder Identity-Columns. Alles andere ist Poker in einer Mehrbenutzerumgebung.
Die SQL Exception beim Versuch gleichen PK erneut zu speichern kommt erst beim Commit.


----------



## klattiator (22. Dez 2008)

Also ich arbeite mit einer access-db. Und für den Fall, dass der Benutzer die Baustellen-Nr ändert, muss ich gewährleisten, dass diese noch nicht vorhanden ist.
Was sind denn Sequenzen, bzw. Identity-Columns? Hab mich jetzt noch nicht so intensiv mit Datenbanken beschäftigt    :wink:


----------



## maki (22. Dez 2008)

>> Hab mich jetzt noch nicht so intensiv mit Datenbanken beschäftigt 
Solltest du machen!

Fachliche DB Schlüssel sind miese Schlüssel, die einzig wahren sind technische Schlüssel.


----------



## klattiator (22. Dez 2008)

meinst du mit technischen schlüsseln automatisch generierte und mit fachlichen vom benutzer erstellte?


----------



## maki (22. Dez 2008)

Technische Schlüssel sind rein technisch, zB. von der DB generierte, haben nix mit den fachlichen Abstraktionen zu tun und können daher auch nicht vom User eingegeben werden.

Schlüssel dürfen sich per Definition nicht ändern.

Es reicht wenn du deinen "fachlichen Schlüssel" als unique deklarierst, jedenfalls darf dieser nie in der DB als Primärschlüssel verwendet werden.

Wenn du das so gemacht hättest, wäre es gar kein Problem wenn der User die Baustellen-Nr ändert und die DB würde automatisch einen Fehler zeigen wenn jemand versucht 2 mal diegleiche Baustellen-Nr einzugeben.


----------



## klattiator (22. Dez 2008)

ok! alles klar! danke für die tips!


----------

