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) " +
");";
我正在尝试提交到 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) " +
");";