2015-07-19 65 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) " + 
     ");";