2014-02-20 35 views
0

我想在MySql中使用Java JDBC創建2個表,第一個運行良好,但是當我執行第二個創建表命令時出現錯誤。問題看起來像在外鍵定義不知道什麼是缺少的?在Java中執行創建表語句時出錯?

錯誤:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server 
version for the right syntax to use near 'FOREIGN KEY(UniqueBusID) 
REFERENCES BUS_3_CLEARBROOK_UFV_GOLINE_TO_UFV_BusDetai' at line 1 

代碼

String table_UniqueBusNameTimings = BusDetails+"_BusTimings"; 
String timings= "Timings"; 
String dayofweek = "DayOfWeek"; 
String FuniqueBusID = "UniqueBusID"; 

String table_UniqueBusNameDetails = BusDetails+"_BusDetails"; 
String PuniqueBusID = "UniqueBusID"; 
String StopNames = "StopNames" ; 

String sql1 = "CREATE TABLE "+table_UniqueBusNameDetails+ 
    "(UniqueBusID VARCHAR(255) not NULL, " + 
    " StopNames VARCHAR(1000), " + 
    " PRIMARY KEY (UniqueBusID))"; 

String sql2 = "CREATE TABLE "+table_UniqueBusNameTimings+ 
    "(Timings VARCHAR(255) , " + 
    " DayOfWeek VARCHAR(25), " + 
    " UniqueBusID VARCHAR(255) "+ 
    " FOREIGN KEY(UniqueBusID) REFERENCES "+table_UniqueBusNameDetails+"(UniqueBusID))"; 

stmt.executeUpdate(sql1); 
stmt.executeUpdate(sql2); 
+4

請花更多的時間在未來的格式化你的代碼 - 使用在提交之前查看帖子將如何看待其他人。請注意,堆棧溢出不能很好地與選項卡一起玩 - 而是使用空格。 –

+2

看起來你失蹤後逗號'UniqueBusID VARCHAR(255)' –

回答

1

你有一個逗號UniqueBusID VARCHAR(255)後失蹤。只需將其更改爲UniqueBusID VARCHAR(255),並且您的代碼應該沒問題。

有關創建帶有外鍵表相關的語法的詳細信息,可以瀏覽此頁:http://www.w3schools.com/sql/sql_foreignkey.asp

+0

謝謝...從來不知道它是這樣一個愚蠢的錯誤 –

+0

歡迎。有時候,你只需要另一雙眼睛。 :) – Neels

1

我們應該用CREATE TABLE IF NOT EXISTS...那麼如果我們有外鍵關係,那麼我們應該使用SET FOREIGN_KEY_CHECKS=0;最後,我們將執行批處理什麼具有所有的聲明,然後提交。

+0

感謝您的不存在部分。 –

1

像列,索引每個屬性,外鍵等,應通過逗號在創建表的語法seprated「」。所以這裏在UniqueBusID VARCHAR(255)之後缺少一個逗號。在這裏添加逗號後會很好。

@Suzon:我們不應該特別是創建表或添加任何約束它會跳過任何約束由MySQL檢查和在數據庫中創建主要問題過程中設置FOREIGN_KEY_CHECKS = 0。我們可以用它只有我們確信它例如影響,我們要從中刪除主表中的某些行甚至子表中包含相應的行,我們的罰款與此等