# JDBC und SQLite Datenbank



## Christopher25 (28. Mai 2016)

Hallo zusammen.

Ich habe da eine Frage.
Wenn ich mit folgendem SQL-Statement eine Tabelle erstelle in SQLite,
und dann per JDBC abfrage, "Gib mir mal alle Primärschlüssel-Spalten" undzwar mit der Methode "getPrimaryKeys(String catalog, String schema, String tablename)" über die DatabaseMetaData, bekomme ich lediglich nur einen einzigen primärschlüssel zurück. Die anderen im Create-Statement angegebenen Primärschlüsselfelder werden lediglich als Not Nullable angezeigt.
Hier nun das Create-Statement:

CREATE TABLE Test (id Integer(255), foreignkey Integer(255), text Varchar(1000), PRIMARY KEY(id, foreignkey));

Merkwürdig finde ich auch, dass wenn ich id ausschließlich "klein" schreibe, bekommt die Datenbank es gebacken, id als Primärschlüssel zu machen.
Wenn ich id mit nur einem einzigen Großbuchstaben schreibe zb. "ID" oder "iD" oder "Id", dann bekomme ich keinen Primärschlüssel zurück und "Id" ist dann auch nurnoch Not Nullable.
Selbst wenn ich PRIMARY KEY direkt zur Spalte definiere also (id Integer PRIMARY KEY, ...) ist dies der Fall.
Diese Vorkommnisse betreffen nur die SQLite Datenbank und mit MySQL, H2 sowie MSSQL treten diese Fehler nicht auf. Eine PostgreSQL Datenbank habe ich leider noch nicht testen können.


----------



## Thallius (28. Mai 2016)

Du Must die primary key Spalten explizit als NOT NULL definieren. Dann sollte es klappen.

Gruß

Claus


----------



## Christopher25 (28. Mai 2016)

Leider hilft das nicht. Hier folgendes Create-Statement mitdem ich das gerade getestet habe:


```
CREATE TABLE TTT(spaltenname1 INTEGER(100) NOT NULL, spaltenname2 INTEGER(100) NOT NULL, spaltenname3 INTEGER(100) NOT NULL, spaltenname4 INTEGER(100), PRIMARY KEY(spaltenname1, spaltenname2));
```


----------



## Christopher25 (28. Mai 2016)

Ich habe gerade gelesen, dass es in SQLite garkeinen zusammengesetzten Schlüssel gibt sondern immer nur eine einzige Spalte, stimmt das wirklich?


----------



## Christopher25 (29. Mai 2016)

Keine Kommentare mehr? mh?
Kennt sich denn keiner mit der SQLite Datenbank aus?


----------



## thet1983 (29. Mai 2016)

Schon mal auf der Seite von SQLite nachgeschaut? 

Optionally, a PRIMARY KEY for the table. Both single column and composite (multiple column) primary keys are supported.


----------



## Christopher25 (30. Mai 2016)

Also doch? Dann weiß ich jetzt nicht, was ich falsch mach


----------



## thet1983 (30. Mai 2016)

also bei funktioniert es 

```
CREATE TABLE user(
id INTEGER NOT NULL,
userid INTEGER NOT NULL,
username TEXT,
PRIMARY KEY(id,userid))
```


----------



## Christopher25 (30. Mai 2016)

Du bekommst über jdbc also zwei Spalten als Key zurück?


----------

