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