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的主要内容,如果未能解决你的问题,请参考以下文章
SQL 语句 org.h2.jdbc.JdbcSQLException 中的语法错误:
线程“主”com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException 中的异常:您的 SQL 语法有错误