# SQL PRIMARY KEY unique



## JimK (23. Jul 2012)

Guten morgen,

ich habe ein kleines Problem mit einer SQL Abfrage und hoffe, dass ihr mir weiterhelfen könnt. 
Meine SQLite DB besitzt zwei Tabellen. Die punkte_tb, die ca. 700 000 Punkte enthält und die segment_tb, die am Anfang noch leer ist. 

Mein Ziel ist es, im ersten Durchgang einen Ausgangspunkt aus den punkte_tb zu wählen und ich einer 3x3 Matrix (beinhaltet umliegende Punkte) abzulegen. Das Ergebnis wird dann in die segment_tb abgelegt und aus der punkte_tb gelöscht. 
In den darauffolgenden Durchgängen soll dann ein Punkte aus der segment_tb als Ausgangspunkt dienen. mit dem Ausgangspunkt soll dann geprüft werden, ob Punke aus der punkte_tb diesen umgeben, wenn ja, dann soll das Ergebnis wieder in die segment_tb geschrieben werden.

Der erste Durchlauf funktioniert. Aber im Zweiten kommt der SQL error: PRIMARY KEY must be unique.
Ich nehme an, weil die Werte aus p2 schon in der segment_tb existieren. Eigentlich soll er diese nicht mit in betracht ziehen. Könnt ihr mir sagen warum er es aber macht? Hier ist mein SQL Code:


```
INSERT INTO segment_tb Select p2.* FROM segment_tb p1, punkte_tb p2 
WHERE p2.id NOT IN (SELECT segment_tb.id FROM segment_tb) 
AND ((ST_X(p1.geom)+ 0.5)>=ST_X(p2.geom)) 
AND ((ST_Y(p1.geom)+ 0.5)>=ST_Y(p2.geom)) 
AND((ST_X(p1.geom)- 0.5)<= ST_X(p2.geom)) 
AND ((ST_Y(p1.geom)- 0.5)<= ST_Y(p2.geom)) 
AND p1.hoehe - 1 <= p2.hoehe 
AND p1.hoehe + 1 >=p2.hoehe 
AND p2.zusatz == 0
```


----------



## JimK (23. Jul 2012)

Ok, ich hab es jetzt erstmal anders gelöst.


----------



## F.S.WhiTeY (23. Jul 2012)

Moin,

sich mit SQL auszukennen ist schon ne geile Sache und solche Sachen händisch zu lösen ist zu Übungszwecken schon der richtige Ansatz... aber wofür gibt es JPA ?

Wenn man Java Programmiert will man Objektorientiert arbeiten... also warum machst du dir das Leben so schwer?

Entitys rocken!

LG

David


----------



## JimK (23. Jul 2012)

Hey F.S.WhiTeY,

vielen Dank für deine Antwort. 
Ich muss dir gestehen, dass ich leider noch nichts von JPA gehört habe. Was kann ich damit mit machen bzw. für was ist es gut?

LG
JimK


----------



## F.S.WhiTeY (23. Jul 2012)

JPA ist die Java Persistence API. Diese Dient dazu, die Relationale Datenbankwelt mit der Objektorientierten Programmierwelt in einklang zu bekommen. 

Lies dir einfach mal das hier dazu durch:

http://www.pdbm.de/skripte/hibernate-folien.pdf

das buch kann ich btw sehr empfehlen. Genauso wie das JSF 2.0 wenn du mit JSF arbeiten willst. Ist nen Dozent von mir, einfach nur genial der Typ.


----------



## JimK (23. Jul 2012)

Ich bin gerade am überlegen, ob ich auf ObjectDB umsteige. Die Berechnung dauert bisher bei SQLite ziemlich lange und ObjectDB soll wohl schneller sein. 
Danke für deinen Tipp...


----------

