1

テーブルから何百万ものデータをフェッチしようとしています。Java Play Framework 2.0 を使用していますが、問題があります。クエリに制限を設定するとうまく機能し、すべてのデータを要求すると次のようなエラーがスローされます

Exception in thread "pool-3-thread-1" java.lang.OutOfMemoryError: Java heap space

誰でもここで私を助けることができますか?

4

2 に答える 2

2

マニュアルからの引用:

デフォルトでは、ドライバはクエリのすべての結果を一度に収集します。これは大規模なデータ セットには不便な場合があるため、JDBC ドライバーはデータベース カーソルに基づいて ResultSet を作成し、少数の行のみをフェッチする手段を提供します。

(私のものを強調)

マニュアルでは、すべてをメモリにロードしないようにドライバーを構成する方法について詳しく説明しています:
http://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor

于 2013-04-17T13:07:51.300 に答える
0

データベースによっては、 java.sql.Statement.setFetchSize が役立つ場合があります。Play Framework には詳しくありませんが、JDBC でフェッチ サイズを設定できます。

Statement.setFetchSize(nSize) メソッドが実際に行うことを参照してください。

于 2013-04-17T15:19:07.090 に答える