4

通常、Mysql を使用して大きな結果セットをクエリする場合は、次のように記述します (この回答から取得):

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

現在、jOOQ 2.0.5 を使用していますが、同じ結果が得られません。

fetchLazy運が悪かったので呼び出してみましたが、結果セット全体がメモリにロードされます。

Cursor<Record> result = query.fetchLazy(Integer.MIN_VALUE);

回避策として、を使用してSQLクエリを取得し、それを実行するquery.getSQL()のに適したものを作成できます。Statement

jOOQ を使用して結果セットをストリームする別の方法はありますか?

4

1 に答える 1

4

JDBC 仕様によると、メソッドInteger.MIN_VALUEの有効な引数ではありません。Statement.setFetchSize()

この Statement によって生成された ResultSet オブジェクトにさらに行が必要な場合に、データベースからフェッチする必要がある行数に関するヒントを JDBC ドライバーに提供します。指定された値がゼロの場合、ヒントは無視されます。デフォルト値はゼロです。

パラメーター:

フェッチする行

例外: SQLException - データベース アクセス エラーが発生した場合、このメソッドがクローズされた Statement で呼び出された場合、または条件 rows >= 0 が満たされていない場合。

実装はSQLException、負のフェッチ サイズに対して をスローする場合があります。したがって、jOOQ は 0 未満のパラメータを受け入れません1。代わりに のフェッチ サイズを使用してみてください。それまでの間、jOOQ の次のリリースでは、JDBC 標準を破って、この文書化された MySQL 機能をサポートできる可能性があり ます。

https://github.com/jOOQ/jOOQ/issues/1263 (jOOQ 2.2.0 で実装)

于 2012-03-31T05:36:14.860 に答える