CREATE TABLE IF NOT EXISTS 在 UCanAccess 中引发错误
Posted
技术标签:
【中文标题】CREATE TABLE IF NOT EXISTS 在 UCanAccess 中引发错误【英文标题】:CREATE TABLE IF NOT EXISTS throws an error in UCanAccess 【发布时间】:2016-07-26 09:06:16 【问题描述】:我没有在我的 Java 项目中使用 mysql xampp 服务器,而是决定使用 Microsoft Access 作为我的数据库,但是我在使用这种语法的查询中遇到了错误。这是我的 Java 代码
public static void main(String[] args) throws SQLException
// TODO code application logic here
try
conn = DriverManager.getConnection("jdbc:ucanaccess://C:\\Database.accdb;jackcessOpener=myproject.CryptCodecOpener","root", "");
System.out.println("successfuly connected");
Statement s = conn.createStatement();
PreparedStatement state = conn.prepareStatement("CREATE TABLE IF NOT EXISTS test(name varchar(400))");
state.executeUpdate();
catch (SQLException e)
e.printStackTrace();
finally
这是错误:
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.1 user lacks privilege or object not found: IF
at net.ucanaccess.jdbc.UcanaccessPreparedStatement.executeUpdate(UcanaccessPreparedStatement.java:256)
at myproject.MyProject.main(MyProject.java:31)
在 MySQL 中使用 IF NOT EXISTS
可以正常工作,但在 UCanAccess 中我得到了那个错误,如果我删除 IF NOT EXISTS
它可以正常工作。
【问题讨论】:
您是否有足够的权限在数据库中创建表? 为什么不直接使用HSQLDB呢? 是的。如果我像这样 CREATE TABLE TEST("name varchar(250)") 删除 IF NOT EXISTS,它可以正常工作。 @a_horse_with_no_name 你这是什么意思?抱歉,我是这个图书馆的新手 如果您使用 Java 编程,为什么不使用 Java 嵌入式数据库? UCanAccess 只是一个使 MS Access 数据库可以通过 JDBC 访问的包装器——它在内部使用 HSQLDB 来处理 SQL 语句。如果真的不需要 MS Access 并且只想在 Java 应用程序中使用嵌入式数据库,请直接使用 HSQLDB 或 H2。两个 DBMS 都比 MS Access 强大得多,并且会给您带来更少的问题 【参考方案1】:UCanAccess 根本不支持 DDL 语句中的IF NOT EXISTS
。你应该可以这样做:
try (Statement s = conn.createStatement())
s.execute("CREATE TABLE test (name TEXT(50))");
catch (UcanaccessSQLException ex)
if (ex.getMessage().indexOf("object name already exists:") > 0)
System.out.println("INFO: Table already exists.");
else
throw ex;
【讨论】:
以上是关于CREATE TABLE IF NOT EXISTS 在 UCanAccess 中引发错误的主要内容,如果未能解决你的问题,请参考以下文章
如何判断 CREATE TABLE IF NOT EXISTS 是不是创建了表? [复制]
# mysql CREATE TABLE IF NOT EXISTS metadata lock坑
2022-12-17:订单最多的客户。以下数据,结果输出3。请问sql语句如何写? DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `
2022-11-21:第N高的薪水。表结构和数据的sql语句如下。请问sql语句如何写? DROP TABLE IF EXISTS employee; CREATE TABLE employee (
2022-11-29:查找重复的电子邮箱。以下数据中a@b.com是重复的,请写出sql语句。 DROP TABLE IF EXISTS person; CREATE TABLE person (
2022-12-07:删除重复的电子邮箱。删除重复数据后,id=3的数据被删除。请问sql语句如何写? DROP TABLE IF EXISTS `person`; CREATE TABLE `per