2

Groovy の Sql オブジェクトを使用して、postgres db でクエリを実行しています。クエリは次のように実行されています。

List<Map> results = sql.rows("select * from my_table")
List<Map> result2= sql.rows("select * from my_second_table")

私は 2 つのクエリを実行し、データをループ処理して別のデータセットを作成する groovy メソッドを持っていますが、postgres 例外"This ResultSet is closed"エラーが発生する場合があります。

検索したところ、最初はここの問題に関係しているのではないかと考えていました: SQLException: This ResultSet is closed (複数のクエリを実行し、事後に結果セットからデータにアクセスしようとしています) - ただし、例外は次の場合にのみ発生するようです非常に高い負荷 - これは、2 番目のクエリの実行時に最初のデータセットが閉じられるほど単純ではないことを示唆しています。

Groovy の Sql オブジェクトがこれらの状況をどのように処理するか、または何がうまくいかないかを示唆する方法を誰かが明らかにすることはできますか?

4

2 に答える 2

3

Groovy SQL は一種の奇妙な猫です。シンプルなものに使いやすい。より複雑なシナリオがある場合は、おそらく別のものを使用する方がよいでしょう。私見では

最初に 1 つのクエリを実行して結果をコレクションに格納し、2 番目のクエリを実行して結果をコレクションに格納し、次に結果セットではなく 2 つのコレクション間で操作を行うことをお勧めします。データが大きすぎる場合は、集計などを開始する前に、データをローカルに保存する方法を見つけてください。

それが気に入らない場合は、GDK のソース コードをチェックアウトして、結果セットなどに関連する Sql.getInstance() で何が行われているかを理解する必要があるかもしれません。そうすれば、うっかり踏んでしまった地雷を回避できます。 .

于 2012-09-20T03:18:05.440 に答える