java - HSQLDB 神秘异常消息 : "feature not supported"

标签 java sql exception jdbc hsqldb

我有 JDBC 代码,它通过执行 PreparedStatement 插入到数据库表中。当我在内存中的 HSQLDB 数据库上运行代码(作为 JUnit 测试的一部分)时,我得到一个 SQLFeatureNotSupportedException,其中唯一的信息是消息“不支持的功能”和供应商代码 -1500。我正在做的是对表进行基本插入——我无法想象最新的 HSQLDB 不支持这种操作。

我的代码:

public Observations saveOrUpdate(final Observations observations)
{
    try
    {
        if (connection == null)
        {
            connection = getJdbcTemplate().getDataSource().getConnection();
        }

        // create the prepared statement
        String sql = "INSERT INTO " + Observations.TABLE_NAME +
                     " (OBS_YEAR, WINTER, SPRING, SUMMER, FALL, ANNUAL, DATA_TYPE, CREATED_DATE, UPDATED_DATE, " +
                     Observations.ID_COLUMN_NAME +
                     ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1, observations.getYear());
        preparedStatement.setBigDecimal(2, observations.getJan());
        preparedStatement.setBigDecimal(3, observations.getFeb());
        preparedStatement.setBigDecimal(4, observations.getMar());
        preparedStatement.setBigDecimal(5, observations.getApr());
        preparedStatement.setBigDecimal(6, observations.getMay());
        preparedStatement.setString(7, observations.getDataType().toString());
        preparedStatement.setTimestamp(8, new Timestamp(observations.getCreatedDate().getTime()));
        preparedStatement.setTimestamp(9, new Timestamp(observations.getUpdatedDate().getTime()));
        preparedStatement.setLong(10, observations.getId());
        preparedStatement.executeUpdate(sql);

        return observations;
    }
    catch (SQLException ex)
    {
        throw new RuntimeException(ex);
    }
}

任何人都可以建议可能是什么问题或我应该进一步调查的其他任何事情吗?预先感谢您的帮助。

--詹姆斯

最佳答案

您需要调用preparedStatement.executeUpdate()(不带参数sql)。

您调用了方法 PreparedStatement.executeUpdate(String sql),根据 JDBC 规范,这是非法的。再次传递SQL语句真的没有意义,因为你在创建PreparedStatement对象的时候已经传递过了。即使你认为你传递了相同的字符串,调用这个方法也是不合法的。调用方法不合法有点奇怪 :-) 但事实就是如此。在这种情况下,所有符合标准的 JDBC 驱动程序都需要抛出异常。

但我同意错误消息是含糊不清的。

关于java - HSQLDB 神秘异常消息 : "feature not supported",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3762533/

相关文章:

java - 如何强制 Rythm 在 init 时解析和编译主目录中的所有模板?

Java-removeIf 示例

mysql - SQL 中关于供应商 ID 的列名称不明确的查询错误

"x-forwarded-for" header 中的 PHP-Blind SQL 注入(inject)

java - 如何使用 PrepareStatement 在 Java 中执行 INSERT SELECT INTO

java - JUnit测试问题

sql - 在 SQL 中使用条件 UPDATE 语句

c# - 集合被修改异常 linq-to-objects

java - 三层架构和异常(exception)

ruby-on-rails - Rails 用户 : What exception notification software do you use?