Type1中的SQL语法:java jdbc odbc bridge

Posted

技术标签:

【中文标题】Type1中的SQL语法:java jdbc odbc bridge【英文标题】:SQL syntax in Type1: java jdbc odbc bridge 【发布时间】:2015-07-19 03:37:17 【问题描述】:

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

问题:

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

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 表,但不会将数据插入到相应的表中。 (我已经在代码中注释了与 batch 表相关的所有内容。所以,我只能看到 user 表的错误)

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

代码

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

【问题讨论】:

据我所知,必须始终命名约束(包括主键)并且子句的顺序很重要,请参阅msdn.microsoft.com/EN-US/library/office/ff837200.aspx 【参考方案1】:

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

你的情况

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

【讨论】:

以上是关于Type1中的SQL语法:java jdbc odbc bridge的主要内容,如果未能解决你的问题,请参考以下文章

Java Jdbc SQL 异常(语法错误)

20145207《Java程序设计》第9周学习总结

20145207《Java程序设计》第9周学习总结

SQL 语句 org.h2.jdbc.JdbcSQLException 中的语法错误:

线程“主”com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException 中的异常:您的 SQL 语法有错误

PreparedStatementCallback; JDBC Spring 中的错误 SQL 语法