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
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:
hat von euch jemand eine Idee, wo da der Fehler liegt?
Gruß, Alex
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