hsqldb 2.3.2 jdbc驱动不支持ResultSet.first()?

Posted

技术标签:

【中文标题】hsqldb 2.3.2 jdbc驱动不支持ResultSet.first()?【英文标题】:hsqldb 2.3.2 jdbc driver does not support ResultSet.first()? 【发布时间】:2015-05-13 22:47:09 【问题描述】:

我正在使用 JDK 8 玩 HSQLDB+JDBC 驱动程序。 使用 rs.next() 循环结果可以正常工作,但是,使用 rs.first() 不起作用:不支持功能?!是设计使然还是错误?

我打算用Spring jdbc模板访问hsqldb,担心以后遇到这样的问题会卡住。

    String jdbcUrl = "jdbc:hsqldb:hsql://localhost:9999/configdb";
    try(Connection con = DriverManager.getConnection(jdbcUrl, "SA", "");
        PreparedStatement stmt = con.prepareStatement(
                                "SELECT * FROM contacts");
        ) 

        ResultSet rs = stmt.executeQuery();
        // rs.first() does not work !
        while(rs.next())
            //do sth here
        
     catch (SQLException e) 
        throw new RuntimeException("test jdbc connection failed", e);
    

【问题讨论】:

“rs.first() 不起作用”是什么意思?您是否遇到任何编译/运行时错误? 我得到 sql 异常,说运行时不支持该功能。 @Reimeus 默认结果集是只向前的,JDBC 规范说只向前不应该支持first() 和其他滚动方法。不确定它与成为“玩具数据库”有什么关系;这是关于遵循规范。 @MarkRotteveel 完全同意!!! 【参考方案1】:

尝试让您的 ResultSet 可滚动:

 PreparedStatement stmt= conn.prepareStatement("SELECT * FROM contacts",
   ResultSet.TYPE_SCROLL_SENSITIVE,
   ResultSet.CONCUR_UPDATABLE);

我认为这应该可行

【讨论】:

以上是关于hsqldb 2.3.2 jdbc驱动不支持ResultSet.first()?的主要内容,如果未能解决你的问题,请参考以下文章

JDBC URL 中不支持 HSQLDB default_table_type

CSV 上的 SQL 使用 HSQLDB JDBC 驱动程序

P6spy 不会监视 hsql jdbc 驱动程序

Hibernate 4.1.2 HHH000342:无法获得与查询元数据的连接:没有为 jdbc:hsqldb:mem:test 找到合适的驱动程序

HSQLDB 神秘异常消息:“不支持功能”

比较 hsqldb 和 mysql