当前位置: 首页 > 面试题库 >

HSQLDB隐式异常消息:“功能不受支持”

葛修筠
2023-03-14
问题内容

我有通过执行PreparedStatement插入数据库表的JDBC代码。当我在内存中的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)。

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

但是我同意错误消息是神秘的。



 类似资料:
  • 问题内容: 我有通过执行PreparedStatement插入数据库表中的JDBC代码。当我在内存中的HSQLDB数据库上运行代码时(作为JUnit测试的一部分),我得到一个SQLFeatureNotSupportedException,唯一的信息是消息“功能不受支持”和供应商代码-1500。我正在做的是基本插入表中- 我无法想象最新的HSQLDB不支持此功能。 我的代码: 谁能说出问题所在或我需

  • 我正在尝试使用RESTTemplate使用GET请求命中URL。它给出了一个异常,说明http协议不受支持。 我可以使用简单的旧HttpURLConnection方法访问endpoint来获得预期的响应。但是我无法使用rest模板这样做。我没有使用任何类型的VPN或代理,而尝试这一点。 下面是我正在使用的代码。我将用ip:port替换实际使用的ip和端口。 谢谢你。 编辑:使用HttpUrlCon

  • 我已经研究这个问题好几天了,决定在这里问这个问题,看看是否有人能帮我指出正确的方向。 我试图用MS Access 2013表格中的数据填充我的Netbeans 8.0.2程序中的组合框。 我正在使用最新的“Ucanaccess”及其所有必要的组件来获取两者之间的连接,据我所知,连接是好的。然而,当我运行程序时,它会弹出一条错误异常消息,内容如下: 就这样-没有其他字母、字符、数字。。。没有什么 我

  • 我正在尝试从进行HTTP调用。该调用在post man中工作正常,下面是调用的版本, 但是我试图使用进行相同的调用。 但是,应用程序正在抛出异常, JAVAlang.IllegalStateException:block()/blockFirst()/blockLast()正在阻塞,这在thread reactor-http-nio-3中不受支持 这里出了什么问题?我对反应式编程非常陌生,谷歌对这

  • 在使用gradle执行特定测试套件的代码时,我得到以下错误。不明白原因。感谢任何帮助。 org.gradle.internal.remote.internal.MessageIOException:无法写入“/127.0.0.1:53644”.在org.gradle.internal.remote.internal.inet.socketconnection.flush(socketconnect

  • 编辑:因为人们仍然从google登陆这里,你必须在OpenGL环境中调用每一个OpenGL方法。因此,在使用GL做任何事情之前,请确保您在一个上下文中。 我试图用lwjgl在我的屏幕上呈现一个简单的文本,但是每次都失败了!当我启动游戏时,它崩溃了,并向我抛出错误: 我需要使用现代openGL还是什么?我真的需要帮助