私は、何百万ものレコードを持つテーブルを持っています。システムを高速化するために、私はJavaコードでページ区切りの概念を実装する必要があります。私は一度に1000レコードを取り出して処理し、さらに1000レコードを選んで処理しなければなりません。私はすでにいくつかのことを試みており、どれも働いていません。クエリが、それは私に結果を与えるが、クエリがSELECT * from TABLENAME Where ROWNUM BETWEEN 10 and 20
のあるとき、それは空の結果セットを返すSELECT * from TABLENAME Where ROWNUM BETWEEN 0 and 10
あるとき、上記の例でJavaのページネーションJDBC
1) String query = "select * from TABLENAME" + " WHERE ROWNUM BETWEEN %d AND %d";
sql = String.format(query, firstrow, firstrow + rowcount);
- 私が試した事のいくつかを以下に示します。私もDBで実行しようとしましたが、空の結果セットが返されました(理由はわかりません)
2)preparedStatement.setFetchSize(100);
私はJavaコードでこれを持っていますが、それでもテーブルからすべてのレコードを取り出します。このステートメントを追加しても、とにかく私のコードには影響しませんでした。
助けてください!
なぜですか?単にResultSetをループしてデータベースのカーソルを処理させるのはなぜですか? –
'setFetchSize'は、ドライバが次の_(fetchSize)_' resultSet.next() '呼び出しに対して一度に要求する行数だけを指定します。それはあなたにすべての行を依然として提供します。代わりに 'setMaxRows'を探しているかもしれません。 –
100万以上のレコードをフェッチしようとすると "Out of Memory"になります。 – user3845894