【问题标题】:createArrayOf string in hsqldb.jdbc returns AbstractMethodErrorhsqldb.jdbc 中的 createArrayOf 字符串返回 AbstractMethodError
【发布时间】:2016-03-11 11:47:08
【问题描述】:

我正在为与 Oracle 数据库一起运行的 java 程序编写测试用例。我的代码是:

st = conn.prepareStatement( MY_QUERY, ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_READ_ONLY);

            Array array  = conn.createArrayOf("VARCHAR", ids);
            st.setArray(1, array);
            rs = st.executeQuery();

查询在哪里

QUERY = "SELECT * from TABLE where id in ?"

我们正在使用 hsqldb 数据库进行测试。然而,在测试中运行上面的代码给出了

java.lang.AbstractMethodError: org.hsqldb.jdbc.jdbcConnection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;

createArrayOf 线上。

我无法找到解决此问题的方法。将不胜感激任何帮助。谢谢

【问题讨论】:

  • 您使用的是什么版本的 HSQLDB? createArrayOf(String typeName, Object[] elements) 方法是在 Java 1.6(或 JDBC 4)中添加的,所以看起来你的 HSQLDB 版本没有实现 JDBC 4。
  • 我的版本是 1.8.0.9 。我正在使用它,因为我们的 Spring 版本是 3.1.1,那是当时使用的 HSQLDB 版本。我应该升级看看吗?
  • 据我所知,HSQLDB 1.8.x 仅支持(部分)JDBC 3。最新的是2.3.3,但我不知道其中对JDBC 4 的支持程度。

标签: jdbc hsqldb ojdbc


【解决方案1】:

JDBCConnection(实现java.sql.Connection)类的official HSQLDB JavaDoc(2.x 版)中,createArrayOf 方法可用并记录在案:

创建数组

public Array createArrayOf(String typeName, 对象[] 元素) 抛出 SQLException

从 HSQLDB 版本 2.x 开始支持此方法。因此,您应该更新您的应用程序以使用最新的 HSQLDB 驱动程序,它可以是downloaded here

根据changelist,您应该至少使用 2.2.1 版的 HSQLDB 驱动程序作为开发团队的“Connection#createArrayOf 的固定类型限制”方法。

【讨论】:

    【解决方案2】:

    HSQLDB 中的 SQL 查询语法不同:

    SELECT * from TABLE WHERE id IN(UNNEST(?))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      相关资源
      最近更新 更多