2015-07-19 64 views
0

我正在嘗試進入Microsoft Access 2014.我在2014年創建了舊版本的.mdb文件。由於我在創建System DSN時沒有獲得.accdb選項。我在提交Access數據庫時遇到了一些問題。Type1中的SQL語法:java jdbc odbc bridge

問題:

1)我已經做了SQL的點點,但這個SQL我們在這裏用的是完全不同的。凡我可以讀到更多這個SQL語法?即INT VS號等

2)CREATE TABLE用戶拋出SQL語法錯誤

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error in 
CREATE TABLE statement. 
     at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) 
     at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) 
     at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111) 
     at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) 
     at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288) 
     at Test.main(t.java:28) 

我不明白有什麼語法錯誤

3)我想寫的B/W功能是這樣的:

CREATE TABLE user(
ID int PRIMARY KEY AUTO_INCREMENTED NOT NULL, 
name varchar(30)); 
在多個線

,而不是在一個單一的長行。我在每行拆分後都嘗試使用\,但給我編譯時錯誤。

4)如果是CREATE TABLE批次,這個程序運行完好。在MS Access數據庫中創建一個BATCH表,但不將數據插入到相應的表中。 (我有評論相關一批表代碼,這樣,我可以看到錯誤,只爲用戶表中的所有東西。)

注:DB是我用C創建的DSN名稱:\ WINDOWS \ Syswow64資料\ odbcad32.exe的

CODE

import java.sql.*; 
import java.util.*; 

class Test{ 
     public static void main(String args[]){ 
      try{ 
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
       System.out.println("Driver Loaded"); 
       Connection myConnection = DriverManager.getConnection("jdbc:odbc:db"); 
       System.out.println("connection established"); 

       Statement myStatement = myConnection.createStatement(); 
       myStatement.executeUpdate("CREATE TABLE user(ID number NOT NULL AUTO_INCREMENTED,LastName char NOT NULL,FirstName char NOT NULL, Tweet char,PRIMARY KEY (ID))"); 

       //myStatement.executeUpdate("CREATE TABLE batch(name char, age number)"); 

       System.out.println("Created Table"); 
       myStatement.executeUpdate("INSERT INTO user VALUES 
       //myStatement.executeUpdate("INSERT INTO batch values('rakesh', 23)"); 
       System.out.println("Commited in table"); 
       myStatement.close(); 
       myStatement.close(); 

      }catch(SQLException e){ e.printStackTrace();}   
      catch(ClassNotFoundException e){ e.printStackTrace();} 
    } 
} 
+0

據我所知,限制(包括主鍵)必須始終命名並且子句的順序很重要,請參閱https://msdn.microsoft.com/EN-US/library/office/ff837200.aspx –

回答

1

不幸的是,CREATE TABLE和相關d文檔Access SQL中的DL語句非常稀疏且分散,但可以在足夠的挖掘中找到它(在各個位置)。

在你的情況

  • int列類型不需要一個自動編號字段,並導致了「語法錯誤」,
  • AUTO_INCREMENTED不是一個自動編號字段正確的類型說明符,
  • 和(馬克在他的評論暗示)列的屬性必須寫在正確的順序:
String sql = 
     "CREATE TABLE user (" + 
     "id AUTOINCREMENT PRIMARY KEY, " + 
     "name VARCHAR(30) " + 
     ");";