Jak pobrać ilość wierszy z Result Set

Wydawało by się, że będzie to banalne i ograniczy się do wywołania na rzecz naszego ResultSeta metody getRowsCount() lub podobnej.

Niestety nie jest to takie oczywiste. ResultSetMetaData, czyli obiekt zawierające przeróżne informacje na temat samego ResultSeta, również nie posiada odpowiedniej metody.

Wymyśliłem więc takie cuś. Wygląda pokracznie, żeby nie powiedzieć paskudnie… ale działa i dobrze się ma :)

try {
    // scrollowalny ResultSet
    Statement stmt = 
        connection.createStatement(
        ResultSet.TYPE_SCROLL_INSENSITIVE,
        ResultSet.CONCUR_READ_ONLY);
    ResultSet resultSet = 
        stmt.executeQuery("SELECT * FROM t_t1");

    resultSet.last();
    int rowCount = resultSet.getRow();
    resultSet.beforeFirst();
    
    // teraz mozna dalej uzywac
    // do woli ResultSeta
    ...
} catch(SQLException e) {
    e.printStackTrace();
    // lub jakies bardziej eleganckie:
    log.error(e.getMessage());
}