# Primary-Key -> Fehler: "Unique constraint violation&



## DaKu (21. Aug 2006)

Hallo.

Habe hier eine DB (HSQLDB), in der ich 2 Tabellen erstelle:
1.  :arrow:  
	
	
	
	





```
CREATE TABLE name (namIndex INT, namName CHAR, namPicurl CHAR, PRIMARY KEY (namIndex));
```
2.  :arrow:  
	
	
	
	





```
CREATE TABLE zutaten (namIndex INT, zutIndex INT, zutMasse FLOAT , zutEinheit CHAR, zutZutat CHAR, PRIMARY KEY (zutIndex));
```

Wenn ich die DB neu anlege, kann ich sie so oft beschreiben, wie ich möchte.
Wenn ich die DB jedoch geschlossen habe und möchte wieder Daten hinzufügen, bringt er mir bei der 2.Tabelle folgenden Fehler:


> Unique constraint violation: SYS_IDX_47
> at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
> at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
> at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source)
> ...




```
private void add_db(Integer zutindex, String massedb, String einheitdb, String zutatdb) throws SQLException <--- Zeile 156
{...
sqlQuery = "INSERT INTO zutaten VALUES ('"+j+"','"+zutindex+"','"+massedb1+"','"+einheitdb+"','"+zutatdb+"');";
rs = stmt.executeQuery(sqlQuery);  <------------------- Zeile 177
...
}
```



```
add_db((int)zutindex, (String)masse.getText(), (String)einheit.getSelectedItem(), (String)zutat.getText()); <--Zeile 713
```

Hoffe, ihr könnt damit etwas anfangen, ohne die Key's funktioniert es wunderbar.

Danke schoneinmal

DaKu


----------



## foobar (21. Aug 2006)

Du versuchst einen PK einzufügen, den es schon gibt. Am besten verwendest du eine Sequenz oder ein Autoincrement-Feld für die PKs, dann knallt es auch net.


----------



## DaKu (21. Aug 2006)

es sind doch aber 2 unterschiedliche Tabellen und der PK ist pro Tabelle und nicht pro DB, oder?
(soweit ich jetzt weiss, lasse mich aber ein besseres belehren, obwohl es Java ja schon macht  :wink: )


----------



## Caffè Latte (21. Aug 2006)

Hi,

klar ist der Primärschlüssel pro Tabelle ...

Wenn ich die Zeile, in der du den String sqlQuery zusammenfriemelst, so lese und das "j" sehe, würd ich mal an deiner Stelle prüfen, welchen Wert denn dieses "j" speichert ...

Aber am besten machst du es so wie es foobar schon sagte ...


----------



## DaKu (21. Aug 2006)

na das j ist nur dazu da, den Wert um eins zu erhöhen, also einfach nur eine zählvariable und mit rs.next wird es hochgezählt (j++)


----------



## DaKu (22. Aug 2006)

so, habe es raus genommen, jedoch habe ich dadurch jetzt ein anderes Problem, wie bekomme ich den AUTO-INCREMENT von "*zutIndex*" wieder auf 0?
Habe es im Moment so:

```
sqlQuery ="CREATE TABLE zutaten (namIndex INT, zutIndex INT NOT NULL IDENTITY, zutMasse FLOAT , zutEinheit CHAR, zutZutat CHAR, FOREIGN KEY (namIndex) REFERENCES name(namIndex));";
```


Habe ich auch Probiert:

```
sqlQuery ="CREATE TABLE zutaten (namIndex INT, zutIndex INT NOT NULL IDENTITY, zutMasse FLOAT , zutEinheit CHAR, zutZutat CHAR, UNIQUE(namIndex, zutIndex), FOREIGN KEY (namIndex) REFERENCES name(namIndex));";
```


----------



## foobar (22. Aug 2006)

Warum willst du den Wert wieder auf 0 setzen? Es spielt doch keine Rolle welchen Wert der PK hat, hauptsache er ist unique.


----------



## DaKu (22. Aug 2006)

doch spielt er, da ich ihn für meine Abfragen benötige und auch für die Zeilen einer Tabelle verantwortlich ist.
Also im Endeffekt soll eine 1:n Beziehung zwischen Tab1 & Tab 2 bestehen und jedesmal wenn sich der PK in Tab1 um 1 erhöht, soll der PK in Tab2 wieder bei 0 anfangen


----------



## foobar (22. Aug 2006)

Wie der PK in Tabelle 2 soll wieder bei 0 beginnen? Und was  ist wenn in der Tabelle schon ein PK mit 0 existiert? Du kannst den Wert eines PKs doch nicht wieder zurück setzen.


----------



## DaKu (22. Aug 2006)

deswegen habe ich ja auch noch den PK von der 1. Tabelle mit drinne, der eigentlich als Fremdschlüssel fungieren sollte und mit UNIQUE funktioniert es auch nicht


----------



## foobar (22. Aug 2006)

Klar, gibt es Foreignkeys in Hsql, aber nur wenn du ein entsprechendes Foreignkey-Constraint verwendest. 
Was du suchst ist ein zusammengesetzter PK und nicht ein unique-Constraint. Wirf mal einen Blick in die Doku, da wird alles erklärt.


----------



## DaKu (22. Aug 2006)

habe es wohl zu schnell editiert, habe ja Foreignkeys schon oben drinne und es funktioniert.
Habe gedacht, das man mit UNIQUE diesen zusammenges. PK realisiert


----------



## DaKu (22. Aug 2006)

kann man überhaupt einen zusammengesetzten PS aus einem Feld das PS sein soll und einem Femdschlüssel zusammensetzen?
Irgendwie bekomme ich das ganze nicht hin :bahnhof:


----------

