1. ホーム
  2. java

[解決済み] JavaでResultSetを使用して行数を取得する方法は?

2023-06-25 02:07:05

質問

ResultSetをパラメータとして受け取り、ResultSetの行数を含むintを返す簡単なメソッドを作成しようとしています。これは有効な方法なのでしょうか、それともそうでもないのでしょうか?

int size = 0;
    try {
        while(rs.next()){
            size++;
        }
    }
    catch(Exception ex) {
        System.out.println("------------------Tablerize.getRowCount-----------------");
        System.out.println("Cannot get resultSet row count: " + ex);
        System.out.println("--------------------------------------------------------");
    }

これを試してみました。

int size = 0;
try {
    resultSet.last();
    size = resultSet.getRow();
    resultSet.beforeFirst();
}
catch(Exception ex) {
    return 0;
}
return size;

しかし、次のようなエラーが発生しました。 com.microsoft.sqlserver.jdbc.SQLServerException: The requested operation is not supported on forward only result sets.

ご指摘をありがとうございました。

どのように解決するのですか?

この結果セットを生成するプリペアドステートメントにアクセスできるのであれば

connection.prepareStatement(sql, 
  ResultSet.TYPE_SCROLL_INSENSITIVE, 
  ResultSet.CONCUR_READ_ONLY);

これは、カーソルを巻き戻すことができるようにステートメントを準備します。これはまた、文書化された ResultSet Javadoc

しかし、一般的に、カーソルの転送や巻き戻しは、大きな結果セットではかなり非効率的かもしれません。SQL Server における別のオプションは、SQL 文で直接、行の合計数を計算することです。

SELECT my_table.*, count(*) over () total_rows
FROM my_table
WHERE ...