Type1中的SQL语法:java jdbc odbc bridge

时间:2015-07-19 03:37:17

标签: java sql ms-access jdbc odbc

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

问题:

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

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)我想写这样的黑白功能:

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

在多行中,而不是在一条长行中。我尝试在每次分割后使用\但是给了我编译时错误。

4)如果是 CREATE TABLE批次,这个程序运行完美。在MS Access数据库中创建 BATCH 表,但不会将数据插入相应的表中。 (我已在代码中评论了与批量表相关的所有内容。因此,我只能看到用户表中的错误)

  

注意:db是我在C:\ Windows \ SysWOW64 \ odbcad32.exe中创建的DSN名称

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

1 个答案:

答案 0 :(得分:1)

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

在你的情况下

  • 自动编号字段不需要int列类型,导致“语法错误”,
  • AUTO_INCREMENTED不是自动编号字段的正确类型说明符,
  • 和(正如Mark在他的评论中暗示的那样)列属性必须以正确的顺序写出:
String sql = 
        "CREATE TABLE user ( " +
        "id AUTOINCREMENT PRIMARY KEY, " +
        "name VARCHAR(30) " +
        ");";