2010-11-15 45 views
0

我在Java程序中创建mySQL表时遇到问题。我不断得到无法创建表...错误号:150外键出错

这里是我的代码:

 String URL="jdbc:mysql://192.168.1.128:3306"; 
      Connection con=(Connection) DriverManager.getConnection(URL,user,pass); 
      Statement stmt=(Statement) con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
      Statement stmt1=(Statement) con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
      String mySQL_new_table=("CREATE TABLE IF NOT EXISTS dbtest.T_AJPES_TR " + "(" + "row_count INT PRIMARY KEY AUTO_INCREMENT," 
       + "rn CHAR(15),sSpre CHAR(5),reg CHAR(5),eno VARCHAR(10),davcna VARCHAR(15),Ime VARCHAR(75),Priimek VARCHAR(75),LOG_ID INT,INDEX L_ID (LOG_ID),FOREIGN KEY(LOG_ID) references T_AJPES_TR_LOG(ID_LOG) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = INNODB;"); 
      String mySQL_log = ("CREATE TABLE IF NOT EXISTS dbtest.T_AJPES_TR_LOG" + "(ID_LOG INT PRIMARY KEY AUTO_INCREMENT, Date_import VARCHAR(45),File_import VARCHAR(75)) ENGINE = INNODB;"); 
      stmt.executeUpdate(mySQL_new_table); 
      stmt1.executeUpdate(mySQL_log); 
      ResultSet uprs=stmt.executeQuery("SELECT * FROM dbtest.T_AJPES_TR"); 
      ResultSet uprs1=stmt1.executeQuery("SELECT * FROM dbtest.T_AJPES_TR_LOG"); 

我GOOGLE了很多教程创建外键,我仍然有问题。那么我做错了什么?

回答

1

您可能遇到了外键约束问题,请参阅http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html了解更多详情。

第一个检查是你LOG_ID参考T_AJPES_TR_LOG(ID_LOG)是否正确

+0

好吧,我发现现在是什么问题。我必须先创建T_AJPES_TR_LOG表,然后再创建TR_AJPES_TR表。 那么现在TR_AJPES_TR表自动更新?或者我必须在主程序中添加updateInt()? – Igor 2010-11-15 12:00:32

+0

没错,它打破了FK约束,因为另一个表不在那里,是有道理的。你是什​​么意思自动更新,你想达到什么目的? – 2010-11-15 12:19:01

+0

我想这个外键与其他导入的数据一起写入第二个表中。它是自动写入第二个表还是需要添加其他语法? 我可以添加我的整个代码? – Igor 2010-11-15 12:22:05