之前在sqlServer上验证过,但转到Access时报了sql异常.
个人感觉似乎Access本身就不支持类似create table的语句,请熟悉Access的高手指点一下,类似下面的在sqlServer下的sql语句,在Access下应该如何写,不胜感激。
下面是错误信息,第一行是sql语句。
use mydb IF EXISTS(SELECT name FROM sysobjects WHERE name = '用户表' AND type = 'U') DROP TABLE 用户表 CREATE TABLE 用户表(索引 int IDENTITY (1, 1) NOT NULL ,口令 char(20) NULL,用户名 char(10) NULL,用户组 char(4) NULL)
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 无效的 SQL语句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(Unknown Source)
at dbtools.DBTools.executeOtherSql(DBTools.java:110)
at dbtools.DBTools.main(DBTools.java:322)
4 个解决方案
#1
Access中的语句和SQLSERVER肯定不一样的~~
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 无效的 SQL语句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。
估计是不支持CREATE的
建议用DERBY数据库,JDK1.6带的 嵌入式数据库,个人认为完全可以取代ACCESS.
package csdn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.derby.drda.NetworkServerControl;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.InputStreamReader;
class TestDerbyServer {
public static void main(String[] args) {
try {
NetworkServerControl dbserver = new NetworkServerControl();//启动服务器
PrintWriter pw = new PrintWriter(System.out);//获取服务器输出
dbserver.start(pw);
Connection conn = DriverManager.getConnection("jdbc:derby:TESTDB;create=true");//本地连接数据库
Statement st = conn.createStatement();
// st.execute("create table USER_INFO (ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");//建表
st.executeUpdate("insert into USER_INFO(ID,NAME) values (1,'hermit')");//插入数据
st.executeUpdate("insert into USER_INFO(ID,NAME) values (2,'test')");//插入数据
/*
*等待用户输入,让程序继续运行,不然程序会运行结束,客户端就连不上了
*/
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Press [Enter] to stop Server");
in.readLine();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 无效的 SQL语句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。
估计是不支持CREATE的
建议用DERBY数据库,JDK1.6带的 嵌入式数据库,个人认为完全可以取代ACCESS.
package csdn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.derby.drda.NetworkServerControl;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.InputStreamReader;
class TestDerbyServer {
public static void main(String[] args) {
try {
NetworkServerControl dbserver = new NetworkServerControl();//启动服务器
PrintWriter pw = new PrintWriter(System.out);//获取服务器输出
dbserver.start(pw);
Connection conn = DriverManager.getConnection("jdbc:derby:TESTDB;create=true");//本地连接数据库
Statement st = conn.createStatement();
// st.execute("create table USER_INFO (ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");//建表
st.executeUpdate("insert into USER_INFO(ID,NAME) values (1,'hermit')");//插入数据
st.executeUpdate("insert into USER_INFO(ID,NAME) values (2,'test')");//插入数据
/*
*等待用户输入,让程序继续运行,不然程序会运行结束,客户端就连不上了
*/
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Press [Enter] to stop Server");
in.readLine();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
#2
楼主说的情况没实践过,不过Access作为文件式的数据库,本身不支持的东西也就没办法弄了,如存储过程,触发器
还得在Access的处理方式上下功夫,祝好运
还得在Access的处理方式上下功夫,祝好运
#3
sysobjects 这表Access里面没有
你还是用DAO或者ADOX吧
你还是用DAO或者ADOX吧
#4
没做过,帮顶一下吧
#1
Access中的语句和SQLSERVER肯定不一样的~~
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 无效的 SQL语句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。
估计是不支持CREATE的
建议用DERBY数据库,JDK1.6带的 嵌入式数据库,个人认为完全可以取代ACCESS.
package csdn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.derby.drda.NetworkServerControl;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.InputStreamReader;
class TestDerbyServer {
public static void main(String[] args) {
try {
NetworkServerControl dbserver = new NetworkServerControl();//启动服务器
PrintWriter pw = new PrintWriter(System.out);//获取服务器输出
dbserver.start(pw);
Connection conn = DriverManager.getConnection("jdbc:derby:TESTDB;create=true");//本地连接数据库
Statement st = conn.createStatement();
// st.execute("create table USER_INFO (ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");//建表
st.executeUpdate("insert into USER_INFO(ID,NAME) values (1,'hermit')");//插入数据
st.executeUpdate("insert into USER_INFO(ID,NAME) values (2,'test')");//插入数据
/*
*等待用户输入,让程序继续运行,不然程序会运行结束,客户端就连不上了
*/
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Press [Enter] to stop Server");
in.readLine();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 无效的 SQL语句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。
估计是不支持CREATE的
建议用DERBY数据库,JDK1.6带的 嵌入式数据库,个人认为完全可以取代ACCESS.
package csdn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.derby.drda.NetworkServerControl;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.InputStreamReader;
class TestDerbyServer {
public static void main(String[] args) {
try {
NetworkServerControl dbserver = new NetworkServerControl();//启动服务器
PrintWriter pw = new PrintWriter(System.out);//获取服务器输出
dbserver.start(pw);
Connection conn = DriverManager.getConnection("jdbc:derby:TESTDB;create=true");//本地连接数据库
Statement st = conn.createStatement();
// st.execute("create table USER_INFO (ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");//建表
st.executeUpdate("insert into USER_INFO(ID,NAME) values (1,'hermit')");//插入数据
st.executeUpdate("insert into USER_INFO(ID,NAME) values (2,'test')");//插入数据
/*
*等待用户输入,让程序继续运行,不然程序会运行结束,客户端就连不上了
*/
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Press [Enter] to stop Server");
in.readLine();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
#2
楼主说的情况没实践过,不过Access作为文件式的数据库,本身不支持的东西也就没办法弄了,如存储过程,触发器
还得在Access的处理方式上下功夫,祝好运
还得在Access的处理方式上下功夫,祝好运
#3
sysobjects 这表Access里面没有
你还是用DAO或者ADOX吧
你还是用DAO或者ADOX吧
#4
没做过,帮顶一下吧