【问题标题】:How to get number of rows returned by Resultset while using HSQLDB?使用 HSQLDB 时如何获取结果集返回的行数?
【发布时间】:2013-10-23 06:05:50
【问题描述】:

在使用 ResultSet.last() 函数获取总行数时,我得到了不支持的异常功能。 我尝试使用 hsqldb 特定连接和 ResultSet 类,但没有成功。

除了遍历所有行之外,有人可以指导任何方法从结果集中获取行数吗?

用于获取行数的代码 sn-p 如下:

rs.last();
int total = rs.getRow();
System.out.println("total no of rows in stu are "+total);
rs.beforeFirst()

【问题讨论】:

  • 为什么不直接做select count(*) from your_condition 并参考stackoverflow.com/questions/19469812/…
  • 您将不得不执行一个单独的查询,该查询仅返回计数并使用该值,否则您将不得不运行一个循环来获取不合适的计数
  • 请分享您的例外情况
  • 抛出的异常是:java.sql.SQLFeatureNotSupportedException: feature not supported
  • @Jagdeep 请说明此异常发生在哪一行,我认为它在 rs.last()

标签: java hsqldb resultset rowcount


【解决方案1】:

查看HSQLDB api 后,可以与ORACLE 相同,如下所示

String URL = "jdbc:oracle:thin:@ip:port:sid";
String USER = "test";
String PASS = "test";
String query = "Select * from mytable";
try {
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    Connection con = DriverManager.getConnection(URL, USER, PASS);
    Statement stmt = con.createStatement(
            ResultSet.TYPE_SCROLL_INSENSITIVE,
            ResultSet.CONCUR_READ_ONLY);
    ResultSet rs = stmt.executeQuery(query);
    if (rs.next()) {
        rs.last();
        System.out.println("total rows is : " + rs.getRow());
    } else {
        System.out.println("No Data");
    }
} catch (Exception e) {
    e.printStackTrace();
}

【讨论】:

  • 答案中的关键是指定 ResultSet.TYPE-SCROLL_INSENSITIVE。默认不允许使用 rs.last()。
  • @fredt 是的,这是正确的。他必须提到这些标志以在两个方向上操纵结果集
  • @fredt:感谢您的帮助,设置标志有助于获得计数...:)
猜你喜欢
  • 1970-01-01
  • 2016-03-27
  • 2021-04-12
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 2015-07-19
  • 2021-03-01
  • 1970-01-01
相关资源
最近更新 更多