Как получить количество строк, возвращаемых Resultset при использовании HSQLDB?

Я получаю функцию исключения, которая не поддерживается при получении общего количества строк с помощью функции ResultSet.last(). Я попытался использовать конкретное соединение hsqldb и класс ResultSet, но безуспешно.

Может ли кто-нибудь указать какой-либо способ получить количество строк из набора результатов, кроме перебора всех строк.

фрагмент кода, используемый для получения строк, приведен ниже:

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

person Learner    schedule 23.10.2013    source источник
comment
Почему бы просто не сделать select count(*) from your_condition и обратиться к stackoverflow.com/questions/19469812/   -  person Prateek    schedule 23.10.2013
comment
вам нужно будет выполнить отдельный запрос, который возвращает только счет и использует значение, иначе вам придется запустить цикл, чтобы получить счет, который не подходит   -  person Rat-a-tat-a-tat Ratatouille    schedule 23.10.2013
comment
Пожалуйста, поделитесь своим исключением   -  person Prateek    schedule 23.10.2013
comment
Возникшее исключение: java.sql.SQLFeatureNotSupportedException: функция не поддерживается   -  person Learner    schedule 23.10.2013
comment
@Jagdeep Пожалуйста, укажите, в какой строке возникает это исключение, я думаю, что это rs.last ()   -  person Prateek    schedule 24.10.2013


Ответы (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();
}
person Prateek    schedule 23.10.2013
comment
Ключом в ответе является указание ResultSet.TYPE-SCROLL_INSENSITIVE. По умолчанию использование rs.last() запрещено. - person fredt; 24.10.2013
comment
@fredt да, верно. он должен упомянуть эти флаги для управления набором результатов в обоих направлениях. - person Prateek; 24.10.2013
comment
@fredt: Спасибо за помощь, установка флага помогла подсчитать... :) - person Learner; 24.10.2013