[Java] HSQLDB: CREATE TABLE funktioniert nicht

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von fragl0r, 8. März 2013 .

  1. 8. März 2013
    HSQLDB: CREATE TABLE funktioniert nicht

    Hi Leute,

    ich versuche mit ner embedded HSQLDB eine Tabelle zu erzeugen. Sieht so aus:

    Code:
    stmt.executeUpdate("CREATE TABLE Buchung (passagier INTEGER,flug INTEGER,datum DATETIME, FOREIGN KEY(passagier) REFERENCES Passagier(id), FOREIGN KEY(flug) REFERENCES Flug(id), PRIMARY KEY (passagier, flug));");
    Aber es kommt immer der Fehler:

    Code:
    java.sql.SQLException: Table not found in statement [CREATE TABLE Buchung (passagier INTEGER,flug INTEGER,datum DATETIME, FOREIGN KEY(passagier) REFERENCES Passagier]
    Meine Vermuntung ist das er den Fehler schmeisst, weill die referenzierte Tabelle noch nicht existiert. Aber sollte das nicht eigentlich problemlos funktionieren? Mit SQLite gings zumindest...

    Lösche ich die referenzierten Spalten, gehts. Wie muss ich das denn lösen?!


    PS:

    So funktionierte es mit SQLite:

    Code:
    stmt.executeUpdate("CREATE TABLE Buchung (passagier INTEGER,flug INTEGER,datum DATETIME, FOREIGN KEY(passagier) REFERENCES Passagier(id), FOREIGN KEY(flug) REFERENCES Flug(id), PRIMARY KEY (passagier, flug));");
    stmt.executeUpdate("CREATE TABLE Flug (flugzeug ,id INTEGER PRIMARY KEY ,linie INTEGER, FOREIGN KEY(linie) REFERENCES Linie(id));");
    stmt.executeUpdate("CREATE TABLE Flugzeug (id INTEGER PRIMARY KEY ,typ INTEGER, FOREIGN KEY(typ) REFERENCES Flugzeugtyp(id));");
    stmt.executeUpdate("CREATE TABLE Flugzeugtyp (id INTEGER PRIMARY KEY ,beschreibung TEXT);");
    stmt.executeUpdate("CREATE TABLE Gepaeck (id INTEGER PRIMARY KEY ,art TEXT);");
    stmt.executeUpdate("CREATE TABLE Linie (id INTEGER PRIMARY KEY ,start TEXT,ziel TEXT);");
    stmt.executeUpdate("CREATE TABLE Passagier (id INTEGER PRIMARY KEY ,gepaeck INTEGER,name TEXT, FOREIGN KEY(gepaeck) REFERENCES Gepaeck(id));");
    stmt.executeUpdate("CREATE TABLE Landebahnen(id INTEGER PRIMARY KEY, frei NUMERIC);");
    stmt.executeUpdate("CREATE TABLE Ramps (id INTEGER PRIMARY KEY, reserviert NUMERIC, belegt NUMERIC);");
     
  2. 9. März 2013
    Zuletzt bearbeitet: 9. März 2013
    AW: HSQLDB: CREATE TABLE funktioniert nicht

    Ich hatte mal so ein ähnliches Problem und vermute hier ist es das selbe. HSQL wandelt Tabellennamen beim Anlegen implizit in Uppercase um, es sei denn man setzt sie in doppelte Anführungszeichen (link). Versuch also mal statt zb Passagier(id) -> PASSAGIER(id), dann sollte es gehen.

    Sehr nervig wenn man das nicht weiß.
     
    1 Person gefällt das.
  3. 11. März 2013
    AW: HSQLDB: CREATE TABLE funktioniert nicht

    Das hatte ich auch schon gelesen, hat mir aber nicht geholfen. Geholfen hat die Tabllen genau in der Reihenfolge zu erstellen, so dass die referenzierten Tabellen auch existierten.

    Meiner Meinung nach war das in MySQL nie ein Problem, aber HSQL will das so. Eine andere Möglichkeit wäre alle Tabellen erstmal anzulegen und anschliessend die Schlüssel zu verteilen.
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.