【问题标题】:HSQLDB: user lacks privilege or object not found errorHSQLDB:用户缺少权限或找不到对象错误
【发布时间】:2017-10-18 20:14:46
【问题描述】:

我正在查看一些旧代码,但在运行其中一个单元测试时遇到了问题。

代码是:

String sql = "insert into customers" + 
            "(name, age, date, id) " +
            " values " + 
            " (?, ?, ?, CUSTOMERS_SEQ.NEXTVAL)";

        if (LOG.isDebugEnabled()) LOG.debug("doInsert: SQL query = " + sql);

        int count;
        PreparedStatement pStmt = null;
        try {
            // insert!
            pStmt = conn.prepareStatement(sql); // fails over here
            //... do other stuff
        }
        //...more things

但是,当尝试准备语句时,它会抛出错误

用户缺少权限或找不到对象:CUSTOMERS_SEQ.NEXTVAL。

我正在阅读有关错误本身的信息,但似乎找不到任何东西。奇怪的是,当我在本地运行查询时 Select CUSTOMERS_SEQ.NEXTVAL from CUSTOMERS 没问题。

我们将不胜感激。

【问题讨论】:

    标签: hibernate prepared-statement hsqldb


    【解决方案1】:

    表达式CUSTOMERS_SEQ.NEXTVAL 不是SQL 标准表达式,而是Oracle 语法之一。您需要启用以下语句的 Oracle 语法兼容性:

    SET DATABASE SQL SYNTAX ORA TRUE
    

    或者在连接 URL 中包含sql.syntax_ora=true

    启用此兼容模式后,INSERT 语句应该可以工作(它确实适用于 HSQLDB 2.4.0)

    等效的 SQL 标准表达式是:

    NEXT VALUE FOR CUSTOMERS_SEQ
    

    【讨论】:

    • 这真的很有帮助!谢谢!
    猜你喜欢
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多