2015-09-29 1 views
0

quand je lance le code de cette erreur suitException SQL: ne peut pas créer la table

Exception in thread "main" java.sql.SQLException: Can't create table 'Sensors_db.one' (errno: 121) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) 
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362) 
    at sensordev.SensorDev.sensorPage(SensorDev.java:283) 
    at sensordev.SensorDev.main(SensorDev.java:893) 

suivant est mon mon code

String type = "37"; 
     String senName = "one"; 
     String query; 
     switch(type){ 
      case "37":{ 

       query = "CREATE TABLE IF NOT EXISTS `"+ senName +"` (" 
         + " `Name` VARCHAR(45) NOT NULL," 
         + " `State` VARCHAR(45) NOT NULL," 
         + " `Time` TIME NOT NULL," 
         + " PRIMARY KEY (`Time`, `State`)," 
         + " INDEX `fk_dummy_1_idx` (`Name` ASC)," 
         + " CONSTRAINT `fk_dummy_1`" 
         + " FOREIGN KEY (`Name`)" 
         + " REFERENCES `Sensors_db`.`sensorInfo` (`SName`)" 
         + " ON DELETE NO ACTION" 
         + " ON UPDATE NO ACTION);"; 
       defaultStmt = conn.prepareStatement(query); 
       defaultStmt.execute(); 

'conn' est mon instance de base de données et 'defaultStmt' est un PreparedStatement

+0

Vous rencontrez une erreur SQL, vous pourriez obtenir plus d'informations plus bas dans votre stacktrace d'exception. Quoi qu'il en soit, je vous suggère d'essayer votre requête directement dans votre ddbb. Espérons que cela aide – lrnzcig

+0

si vous voyez "texte d'erreur de base" et un certain nombre d'erreur "(errno: 121)", puis la meilleure étape suivante est de google ce que ce nombre signifie – Vovka

+0

Merci beaucoup .... @Vovka –

Répondre

0

err 121 indique que le nom de contrainte est déjà utilisé. Changez votre nom de contrainte. Le nom de contrainte doit être unique dans votre base de données.

Pour voir si la contrainte existe déjà.

SELECT 
    table_name 
FROM 
    information_schema.table_constraints 
WHERE 
    constraint_type = 'FOREIGN KEY' 
    AND table_schema = DATABASE() AND 
    constraint_name = 'fk_dummy_1' 
0

fk_dummy_1 existe déjà dans db

changer votre nom Contraindre

"fk_dummy_1" to senName+"fk_dummy_1" 
0

Modifier la dernière déclaration: defaultStmt.executeUpdate();