2013-08-30 69 views
0

我想在我的sqlite數據庫中使用Java創建表。但是在最後一個表的ORDER中不斷出現錯誤的語法錯誤> _ <,這個表有2個外鍵。Sqlite-JDBC創建表語法錯誤

...我不確定我做錯了什麼,任何人都可以檢查並告訴我我的錯誤嗎?

赫雷什的代碼:

public boolean CreateTables() { 
    Connection cn = getConnected(); 
    String createCategory = "Create table Category(" 
      + "id text primary key not null," 
      + "name text not null," 
      + "deliverday int not null," 
      + "isdelete bit not null" 
      + ")"; 

    String createCustomer = "Create table Customer(" 
      + "id text primary key not null," 
      + "name text not null," 
      + "email text not null," 
      + "phone text not null," 
      + "address text not null," 
      + "isdelete boolean not null" 
      + ")"; 

    String createOrder = "Create table Order(" 
      + "id text primary key not null," 
      + "custid text references Category(id) no null," 
      + "catid text references Customer(id) not null," 
      + "orderdate date not null," 
      + "delieverdate date not null," 
      + "description text not null," 
      + "requirement text not null," 
      + "price int not null," 
      + "image text not null," 
      + "product text not null," 
      + "state text not null," 
      + ")"; 
    try { 
     PreparedStatement pst; 
     try { 
      System.out.println("*** Create table Category"); 

      pst = cn.prepareStatement(createCategory); 
      pst.executeUpdate(); 
      pst.close(); 

      System.out.println("*** Category created Successfully"); 
     } catch (Exception e) { 
      System.out.println("*** Failed to create Category"); 
      System.out.println(e.getMessage()); 
     } 

     try { 
      System.out.println("*** Create table Customer"); 

      pst = cn.prepareStatement(createCustomer); 
      pst.executeUpdate(); 
      pst.close(); 

      System.out.println("*** Customer created Successfully"); 
     } catch (Exception e) { 
      System.out.println("*** Failed to create Customer"); 
      System.out.println(e.getMessage()); 
     } 


     try { 
      System.out.println("*** Create table Order"); 

      pst = cn.prepareStatement(createOrder); 
      pst.executeUpdate(); 
      pst.close(); 

      System.out.println("*** Order created successsfully"); 
     } catch (Exception e) { 
      System.out.println("*** Failed to create Order"); 
      System.out.println(e.getMessage()); 
     } 

     System.out.println("*** COMPLETE CREATING TABLE PROCESS ****"); 


     cn.close(); 
     return true; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

赫雷什錯誤。

*** Start to connection Sqlite 
*** Connected to Sqlite successfully 
*** Create table Category 
*** Category created Successfully 
*** Create table Customer 
*** Customer created Successfully 
*** Create table Order 
*** Failed to create Order 
[SQLITE_ERROR] SQL error or missing database (near "Order": syntax error) 
*** COMPLETE CREATING TABLE PROCESS **** 

回答

0

我修好了我所有的律錯誤,它原來是這樣的:

之前我修復

String createOrder = "Create table Order(" 
     + "id text primary key not null," 
     + "custid text references Category(id) no null," 
     + "catid text references Customer(id) not null," 
     + "orderdate date not null," 
     + "delieverdate date not null," 
     + "description text not null," 
     + "requirement text not null," 
     + "price int not null," 
     + "image text not null," 
     + "product text not null," 
     + "state text not null," 
     + ")"; 

後,我修復:

String createOrder = "Create table Orders(" 
    + "id text primary key not null," 
    + "custid text references Category(id)," 
    + "catid text FOREIGN KEY references Customer(id)," 
    + "orderdate date not null," 
    + "delieverdate date not null," 
    + "description text not null," 
    + "requirement text not null," 
    + "price int not null," 
    + "image text not null," 
    + "product text not null," 
    + "state text not null" 
    + ")"; 
+0

你忘記修復第二欄'custid'。 –

4

訂單是sqllite reserved workd/keyword。我建議將表名從Order更改爲Orders或類似的東西,然後嘗試。

+1

THANK YOU SO MUCH!你是最好的! :D !!! .. – zBaoAnhLe

+0

@zBaoAnhLe:不客氣。祝你好運!如果答案幫助你不要忘記接受它。 – kosa

2

您在這裏有一個錯字:

+ "custid text references Category(id) no null," 

+ "custid text references Category(id) not null," 
+0

謝謝你......我修正了這個問題:D! – zBaoAnhLe

0

您正在使用保留關鍵字加上你忘記提及在查詢foreign關鍵字應該的。它應該是這樣的:

String createOrder = "Create table Cus_Order(" 
     + "id text primary key not null," 
     + "custid text FOREIGN KEY references Category(id) not null," 
     + "catid text FOREIGN KEY references Customer(id) not null," 
     + "orderdate date not null," 
     + "delieverdate date not null," 
     + "description text not null," 
     + "requirement text not null," 
     + "price int not null," 
     + "image text not null," 
     + "product text not null," 
     + "state text not null," 
     + ")"; 
0

在你的String createOrder中有兩處錯誤:

1.

而不是 'NOT NULL' 你用 '沒有空'

+"custid text references Category(id) no null," 

糾正它作爲

+"custid text references Category(id) not null," 

2.

最後一個字段無需經過逗號,在這裏你使用了最後一個字段後的逗號。

+ "state text not null," 

刪除逗號狀

+ "state text not null"