Forums: Open Discussion (Thread #29066)

【バッチFW】SQLの実行結果を、1件ずつ読込む方法について (2011-04-13 16:20 by ミスタ #56796)

お世話になります、
もし、ご回答できる方がいらっしゃいましたら、お願い致します。

現在、下記の機能要件を満たすツールを作成中なのですが、
全件出力する際に、メモリの消費を抑えればと思っています。

具体的には、SQLの実行結果を全件ではなく、
1件ずつ、または、チャンク毎に、読込みたいと思っています。

●機能要件(簡略化していますが)
1)java起動引数でテーブル名、インデックス名を指定する
2)Oracleの管理テーブルを参照し、カラム名を取得し、動的にSQLを作成
3)2)のSQLを実行し、テーブルの全件データを取得し、ファイルに出力する

想定ではありますが、下記の実現案を考えました。
フレームワークで提供されている機能を極力使いたいので、
実現案a)を試しましたが、うまくいきませんでした。

●実現案
a)動的なSQLをコレクタに渡し、実行結果をMapの配列などで取得する
b)フレームワークを無視して、Bロジックで、ibatisのQueuePutRowHandler()を呼出す。
(bはこれから試してみる予定です)

●ご質問
1)コレクタに使用するSQLのresultClassは、予め定義したBeanクラスでないと使えないでしょうか。
2)もし、1)が実現不可能な場合、b)の案以外に良い案はございますか。

●補足
・データベースサーバ:Oracle10g
・エラー内容
========================================================================================
jp.terasoluna.fw.batch.core.CollectorException: com.ibatis.sqlmap.client.SqlMapException: There is no statement named java.util.HashMap in this SqlMap.
at jp.terasoluna.fw.batch.core.JobManager.processCollect(JobManager.java:208)
at jp.terasoluna.fw.batch.core.JobManager.work(JobManager.java:159)
========================================================================================

Reply to #56796×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: 【バッチFW】SQLの実行結果を、1件ずつ読込む方法について (2011-04-13 18:47 by ミスタ #56798)

(上記質問、取り下げます。)

下記のメソッドを見落としてました。。。
こちらを使用します。

executeForMapArray(java.lang.String sqlID, java.lang.Object bindParams, int beginIndex, int maxCount)

SQLは都度発行することになりますが、要件は満たしそうですので。
Reply to #56796

Reply to #56798×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login