jdbctemplateクエリメソッドの1つから結果セットオブジェクトを取得する方法はありますか?
私は次のようなコードを持っています
List<ResultSet> rsList = template.query(finalQuery, new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs;
}
}
);
finalQuery Stringに格納されているSQLステートメントを実行して、結果セットを取得したかったのです。クエリは6〜7個のテーブルでの複雑な結合であり、各テーブルから4〜5個の列を選択し、それらの列のメタデータを取得してデータ型とデータをダウンストリームシステムに変換したいと考えています。
単純なクエリで、1つのテーブルのみをフェッチしている場合は、RowMapper#mapRowを使用でき、そのmaprowメソッド内でResultsetExtractor.extractDataを呼び出して結果のリストを取得できます。しかし、この場合、クエリに複雑な結合があり、結果セットオブジェクトとその結果セットメタデータを取得しようとしています...
上記のコードは、結果ごとに同じ結果セットオブジェクトを返し、リストに保存したくないため、適切ではありません...
もう一度、クエリの結果ごとにmaprowが呼び出された場合、リストにRSオブジェクトへの参照がある場合でも、JDBCTemplateはrsと接続を閉じますか?
jdbcTemplate.queryForResultSet(sql)のような簡単なメソッドはありますか?
これで、独自のResultSet Extractorを実装して、データを処理してダウンストリームシステムに挿入しました。
sourceJdbcTemplate.query(finalQuery, new CustomResultSetProcessor(targetTable, targetJdbcTemplate));
このCustomResultSetProcessorはResultSetExtractorを実装し、extractDataメソッドで3つの異なるメソッドを呼び出しています。1つはrs.getMetaData()からのget ColumnTypesで、もう1つは実行によるターゲットメタデータのgetColumnTypesです。
SELECT NAME, COLTYPE, TBNAME FROM SYSIBM.SYSCOLUMNS WHERE TBNAME ='TABLENAME' AND TABCREATOR='TABLE CREATOR'
3番目のメソッドでは、挿入ステートメント(準備済み)フォームのターゲット列タイプを作成し、最後にそれを使用して呼び出します
new BatchPreparedStatementSetter()
{
@Override
public void setValues(PreparedStatement insertStmt, int i) throws SQLException{} }
これが他の人に役立つことを願っています...