Problem mit Create-Statement

alex1511

Mitglied
Hallo zusammen,

ich möchte gerne aus einem Java-Programm heraus einige Tabellen erstellen, die auf einer MySQL-Datenbank bei meinem Provider liegen. Das funktioniert auch tadellos, bis eine einzige Tabelle.

Der SQL-Code sieht folgendermaßen aus
SQL:
CREATE  TABLE IF NOT EXISTS `db_270387_1`.`Exhibit` (
  `IDExhibit` INT NOT NULL AUTO_INCREMENT ,
  `ExhibitName` TINYTEXT NULL ,
  `Amount` INT NULL ,
  `Description` VARCHAR(500) NULL ,
  `rfidTag` VARCHAR(24) NULL ,
  `inExhibition` TINYINT(1) NULL ,
  `IDSection` INT NULL ,
  `IDCatalog` INT NULL ,
  `NameMuseumHolder` VARCHAR(100) NULL ,
  `NameMuseumPropertier` VARCHAR(100) NULL ,
  PRIMARY KEY (`IDExhibit`) ,
  UNIQUE INDEX `EXP ID_UNIQUE` (`IDExhibit` ASC) ,
  INDEX `SektionIDFKEx_idx` (`IDSection` ASC) ,
  INDEX `IDCatalogFKEx_idx` (`IDCatalog` ASC) ,
  INDEX `NaMuseumHoFKEx_idx` (`NameMuseumHolder` ASC) ,
  INDEX `NaMuseumPrFKEx_idx` (`NameMuseumPropertier` ASC) ,
  CONSTRAINT `IDSectionFKEx`
    FOREIGN KEY (`IDSection` )
    REFERENCES `db_270387_1`.`Section` (`IDSection` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `IDCatalogFKEx`
    FOREIGN KEY (`IDCatalog` )
    REFERENCES `db_270387_1`.`Catalog` (`IDCatalog` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `NaMuseumHoFKEx`
    FOREIGN KEY (`NameMuseumHolder` )
    REFERENCES `db_270387_1`.`Museums` (`MuseumName` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `NaMuseumPrFKEx`
    FOREIGN KEY (`NameMuseumPropertier` )
    REFERENCES `db_270387_1`.`Museums` (`MuseumName` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

Führe ich diesen Code in der MySQL-Workbench oder dem PHP-MyAdmin aus funktioniert er und die Tabelle wird problemlos erstellt.

Binde ich ihn jedoch in mein Java-Programm ein bekomme ich folgende Fehlermeldung:
Can't create table 'db_270387_1.Exhibit' (errno: 150)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
at dataStorageAccess.DatabaseInstallation.initializeOnlineTables(DatabaseInstallation.java:369)
at dataStorageAccess.DatabaseInstallation.installOnlineDatabase(DatabaseInstallation.java:34)
at dataStorageAccess.DataStorageAccess.installOnlineDatabase(DataStorageAccess.java:56)
at userInterface.OnlineTest.onlineMain(OnlineTest.java:21)
at userInterface.Main.main(Main.java:29)

der entsprechende Java-Code sieht so aus:
Java:
DatabaseManager.getTestServerConnection().prepareStatement("CREATE  TABLE IF NOT EXISTS `db_270387_1`.`Exhibit` (`IDExhibit` INT NOT NULL AUTO_INCREMENT ," +
				"`ExhibitName` TINYTEXT NULL ,`Amount` INT NULL ,`Description` VARCHAR(500) NULL ,`rfidTag` VARCHAR(24) NULL ,`inExhibition` TINYINT(1) NULL ," +
				"`IDSection` INT NULL ,`IDCatalog` INT NULL ,`NameMuseumHolder` VARCHAR(100) NULL ,`NameMuseumPropertier` VARCHAR(100) NULL ," +
				"PRIMARY KEY (`IDExhibit`) ,UNIQUE INDEX `EXP ID_UNIQUE` (`IDExhibit` ASC) ,INDEX `SektionIDFKEx_idx` (`IDSection` ASC) ,INDEX `IDCatalogFKEx_idx` (`IDCatalog` ASC) ,INDEX `NaMuseumHoFKEx_idx` (`NameMuseumHolder` ASC) ,INDEX `NaMuseumPrFKEx_idx` (`NameMuseumPropertier` ASC) ," +
				"CONSTRAINT `IDSectionFKEx` FOREIGN KEY (`IDSection` ) REFERENCES `db_270387_1`.`Section` (`IDSection` ) ON DELETE CASCADE ON UPDATE CASCADE, " +
				"CONSTRAINT `IDCatalogFKEx` FOREIGN KEY (`IDCatalog` ) REFERENCES `db_270387_1`.`Catalog` (`IDCatalog` ) ON DELETE CASCADE ON UPDATE CASCADE, " +
				"CONSTRAINT `NaMuseumHoFKEx` FOREIGN KEY (`NameMuseumHolder` ) REFERENCES `db_270387_1`.`Museums` (`MuseumName` ) ON DELETE CASCADE ON UPDATE CASCADE, " +
				"CONSTRAINT `NaMuseumPrFKEx` FOREIGN KEY (`NameMuseumPropertier` ) REFERENCES `db_270387_1`.`Museums` (`MuseumName` ) ON DELETE CASCADE ON UPDATE CASCADE) " +
				"ENGINE = InnoDB;").execute();

hat von euch jemand eine Idee, wo da der Fehler liegt?

Gruß, Alex
 
M

Marcinek

Gast
[STRIKE]Prepare Statements können keine DDL ausführen.[/STRIKE]

[STRIKE]Doch können sie, aber dann muss man executeUpdat() nutzen und nicht execute();[/STRIKE]

Ok müsste mit beiden gehen. Versuch es mal mit einer weniger komplizierten DDL.
 
Zuletzt bearbeitet von einem Moderator:

alex1511

Mitglied
Grundsätzlich funktioniert der Zugriff auf die Datenbank. Abgesehen von dieser Tabelle gehören zu der Datenbank noch 12 weitere, ähnlich umfangreiche, Tabellen. Diese werden alle problemlos erstellt. Da ich das Statement ohne Probleme mittels Workbench oder PHP-MyAdmin ausführen kann, liegt der Fehler, meiner Ansicht nach, nicht in der SQL-Syntax.
Aus irgendeinem Grund führt dieses Statement, in Verbindung mit dem restlichen Java-Code, jedoch zu oben genannten Fehler.
 

OlliL

Bekanntes Mitglied
errno 150 ist foreign key fehler wenn mich nicht alles täuscht. Zeige doch mal die Key-Definitionen der referenzierten Tabellen. Ggfl. passt da was nicht zusammen. Ggfl. unsigned die Spalte in Tabelle A aber nicht in Tabelle B. Ältere MySQL Versionen (4.x?) brauchen auch Indizes unter ihren Keys - neue legen die autom. an....
 

alex1511

Mitglied
okay, also im folgenden dann die referenzierten Tabellen:

SQL:
CREATE  TABLE IF NOT EXISTS `db_270387_1`.`Section` (
  `IDSection` INT NOT NULL ,
  `IDUpperSection` INT NULL ,
  `SectionName` VARCHAR(45) NULL ,
  `Type` VARCHAR(45) NULL ,
  `IDMuseum` INT NULL ,
  PRIMARY KEY (`IDSection`) ,
  UNIQUE INDEX `IDSection_UNIQUE` (`IDSection` ASC) ,
  INDEX `IDUpperSectionFKSe_idx` (`IDUpperSection` ASC) ,
  INDEX `IDMuseumFKSe_idx` (`IDMuseum` ASC) ,
  CONSTRAINT `IDUpperSectionFKSe`
    FOREIGN KEY (`IDUpperSection` )
    REFERENCES `db_270387_1`.`Section` (`IDSection` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `IDMuseumFKSe`
    FOREIGN KEY (`IDMuseum` )
    REFERENCES `db_270387_1`.`Museums` (`IDMuseum` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

SQL:
CREATE  TABLE IF NOT EXISTS `db_270387_1`.`Catalog` (
  `IDCatalog` INT NOT NULL AUTO_INCREMENT ,
  `IDUpperCatalog` INT NULL ,
  `CatalogName` VARCHAR(45) NULL ,
  `IDMuseum` INT NULL ,
  PRIMARY KEY (`IDCatalog`) ,
  UNIQUE INDEX `IDCatalogFKCa_UNIQUE` (`IDCatalog` ASC) ,
  INDEX `IDMuseumFKCa_idx` (`IDMuseum` ASC) ,
  INDEX `IDUpperCatalogFKCa_idx` (`IDCatalog` ASC) ,
  CONSTRAINT `IDMuseumFKCa`
    FOREIGN KEY (`IDMuseum` )
    REFERENCES `db_270387_1`.`Museums` (`IDMuseum` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `IDUpperCatalogFKCa`
    FOREIGN KEY (`IDCatalog` )
    REFERENCES `db_270387_1`.`Catalog` (`IDCatalog` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

SQL:
CREATE  TABLE IF NOT EXISTS `db_270387_1`.`Museums` (
  `IDMuseum` INT NOT NULL AUTO_INCREMENT ,
  `MuseumName` VARCHAR(100) NOT NULL ,
  `Description` TEXT NULL ,
  `eMail` VARCHAR(45) NULL ,
  `Tel` VARCHAR(45) NULL ,
  `Tel2` VARCHAR(45) NULL ,
  `IDAddress` INT NULL ,
  PRIMARY KEY (`IDMuseum`) ,
  INDEX `IDAddressFKMu_idx` (`IDAddress` ASC) ,
  UNIQUE INDEX `IDMuseum_UNIQUE` (`IDMuseum` ASC) ,
  UNIQUE INDEX `MuseumName_UNIQUE` (`MuseumName` ASC) ,
  CONSTRAINT `IDAddressFKMu`
    FOREIGN KEY (`IDAddress` )
    REFERENCES `db_270387_1`.`Address` (`IDAddress` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

Um den Zusammenhang grad ein wenig zu erklären. Das ganze wird eine Verwaltungssoftware für ein Museum. Das Museum hat hierbei die Möglichkeit seine Exponate (Exhibits) in verschiedene Kataloge und Sectionen zu ordnen.

Die 3 oben genannten Tabellen werden problemlos installiert
 

OlliL

Bekanntes Mitglied
Mein heisser Tipp:

PHPMyadmin oder die MySQL-Workbench legen die Tabellen mit einem anderen Charset an als unter Java.
legt man z.B. deine 3 Tabellen mit latin1 Charset an, und die 4. Tabelle aus deinem 1. Posting mit UTF8, kommt es auch zu einem errno 150.

finde mal raus mit welchem Charset die 3 Tabellen angelegt wurden (z.B. mit "show create table Museums;"). Und dann packst du diesen gleichen Zeichensatz an das CREATE-Statement aus Posting 1 ran. Also z.B. "..... ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"

In MySQL :: MySQL 5.5 Reference Manual :: 14.3.5.4 FOREIGN KEY Constraints stehts auch nochmal schön:

For nonbinary (character) string columns, the character set and collation must be the same.
 

alex1511

Mitglied
Danke für den Tipp, hab leider gerade erst wieder Zeit gehabt es zu testen. Leider bekomme ich den selben Fehler. Sowohl mit utf-8 als Charset, als auch mit latin1.
 

alex1511

Mitglied
Ich hab den Fehler grad gefunden. Es lag daran, dass ich mit

"CONSTRAINT `IDCatalogFKEx` FOREIGN KEY (`IDCatalog` ) REFERENCES `Catalog` (`IDCatalog` ) ON DELETE CASCADE ON UPDATE CASCADE, "

einen Fremdschlüssel auf eine nicht existierende Tabelle erstellen wollte. Offenbar hatte ich die schlichtweg vergessen diese in den Java-Code zu übertragen. Blöder Fehler.

Ich danke euch für eure Hilfe!

Liebe Grüße, Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Problem mit create-Statement Datenbankprogrammierung 5
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
jeppi MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout? Datenbankprogrammierung 9
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3
O MySQL Problem mit Umlauten?! Datenbankprogrammierung 2
E Hibernate Problem bei bidirektionaler 1:n Verbindung Datenbankprogrammierung 2
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
W jpmdbc Problem -Beispiel funktioniert nicht Datenbankprogrammierung 9
W Verständnis-Problem JPA Grundlagen Datenbankprogrammierung 5
M Problem Array in BLOB-Feld in DerbyDB zu speichern Datenbankprogrammierung 5
M JPA-Persist Problem Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben