1

TOADのように、「COUNT(*)」を使用せずに、選択クエリを実行して結果の数を取得できるようにしたい。コンセプトは、ユーザーが必要な「選択クエリ」を入力し、結果の数を数えるためのオプションをユーザーに提供することです。

try {
   selectStatement = globalConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
   ResultSet selectResultSet = selectStatement.executeQuery(selectStatementString);
   selectResultSet.last();
   int countOfResults = selectResultSet.getRow();
   writeInLabel(kllStatusLabel, "Count Finished: Found " + countOfResults + " Inserts");
} catch (SQLException ex) {
   writeInLabel(kllStatusLabel, "Error executing select query.");
}

このコードは、「selectResultSet.last();」という行で大幅に遅延します。TOAD は、はるかに少ない遅延でそれを行います。(右クリック -> レコード数)。TOAD で結果テーブルを一番下までスクロールしても、スクロールが速くなります。

TOAD はどのようにレコード数を取得しますか?

了解しました。count(*) を使用し、2 つ目の ResultSet を使用して結果を表示します。

ResultSet selectResultSet = selectStatement.executeQuery("select count(*) from (" + selectStatementString + ")");
int countOfResults = 0;
if (selectResultSet.next()){
   countOfResults = selectResultSet.getInt(1);
}
4

2 に答える 2

1

TOAD はおそらく、@@rowcountまたはその他の DB 固有の結果メタデータを選択しています。結果のサイズが必要な場合は、DB に明示的に ( を使用してCOUNT())問い合わせます。

mysql を使用している場合は、ROW_COUNT().

于 2010-12-20T12:24:07.573 に答える
0

カウント付きの選択を排他的に含む別のストアド プロシージャを提供するデータベースに近い状態を維持し、COUNT()必要なときにコードからそのストアド プロシージャにアクセスすることをお勧めします。

于 2010-12-20T12:22:50.623 に答える