SQL Type1 中的语法:java jdbc odbc 桥

SQL syntax in Type1: java jdbc odbc bridge

我正在尝试提交到 Microsoft Access 2014。我用 2014 创建了一个旧版本的 .mdb 文件。因为我在创建 System DSN 时没有得到 .accdb 选项.我在提交到 Access 数据库时遇到了一些问题。

问题:

1) 我已经做了一点 SQL 但是我们在这里使用的这个 SQL 是完全不同的。我在哪里可以阅读更多这个 SQL 语法?即整数与数字等

2) 创建 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 batch,这个程序运行完美。在 MS Access 数据库中创建 BATCH table,但不会将数据插入相应的 table。 (我在代码中评论了与 batch table 相关的所有内容。因此,我只能看到 user table )

NOTE: db is the DSN name that I created in C:\Windows\SysWOW64\odbcad32.exe

代码

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();}
     }
}

不幸的是,Access SQL 中 CREATE TABLE 和相关 DDL 语句的文档非常稀疏和分散,但是通过足够的挖掘可以找到(在各个地方)。

你的情况

  • 自动编号字段不需要 int 列类型,这会导致 "syntax error"、
  • AUTO_INCREMENTED 不是自动编号字段的正确类型说明符,
  • 并且(正如 Mark 在他的评论中暗示的那样)列属性必须以正确的顺序写入:
String sql = 
        "CREATE TABLE user ( " +
        "id AUTOINCREMENT PRIMARY KEY, " +
        "name VARCHAR(30) " +
        ");";