2014-02-20 1 views
0

Java JDBC를 사용하여 MySql에 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

우리는 마지막으로 우리가 일괄 처리를 실행 한 후 우리는 SET FOREIGN_KEY_CHECKS=0;을 사용해야 우리가 외래 키 관계가있는 경우 다음 CREATE TABLE IF NOT EXISTS...을 사용해야합니다

FOREIGN KEY와 테이블을 만들려면 관련 구문에 대한 자세한 내용은

,이 페이지를 탐색 할 수 있습니다 모든 진술을 가지고 커밋을하는 것.

+0

감사합니다. 존재하지 않는 부분. –

1

열, 색인, 외래 키 등의 모든 속성은 테이블 생성 구문에서 쉼표로 구분해야합니다. UniqueBusID VARCHAR (255) 다음에 쉼표가 누락되었습니다. 여기에 쉼표를 추가하면 괜찮을 것입니다.

@Suzon : 우리는 foreign_key_checks = 0을 특별히 테이블을 생성하거나 제약 조건을 추가하는 동안 mysql에 의해 제약 조건 검사를 건너 뛰고 데이터베이스에 주요 문제를 만들지 않도록 설정해서는 안됩니다. 우리는 자식 테이블에 자식 테이블이 심지어 대응하는 행을 포함하는 어떤 테이블을 삭제하기를 원할 경우에만 영향을 줄 수 있습니다.

관련 문제