2010-11-15 42 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