質問

JDBCのSpringのサポートを使用しています。 JdbcTemplateを使用したい(またはSimpleJdbcTemplate)を使用して、クエリを実行し、ResultSetのインスタンスとして結果を取得します。

これを達成する唯一の方法は、以下を使用することです:

String sql = "select * from....";
SqlRowSet results = jdbcTemplate.queryForRowSet(sql);
((ResultSetWrappingSqlRowSet) results).getResultSet();

このアプローチの明らかな欠点は、SqlRowSetの実装タイプについて(キャストすることで)仮定する必要があることですが、もっと良い方法はありますか?

背景情報...

結果をBeanのコレクションではなくResultSetとして取得する理由は、結果が表示のためにJasperレポートに直接渡されるためです。つまり、Java BeanはResultSetの各行を一時的に保存する以外の目的には使用されず、可能な限りすべてのJasperレポートに対してそのようなBeanを作成しないようにしたいと思います。

乾杯、ドン

役に立ちましたか?

解決

クエリを実行して結果を取得するだけであれば、プレーンなjdbcを使用して結果セットを取得してみませんか?これを行うのにスプリングは必要ないことに注意してください。

    Connection c = ...
    c.prepareCall("select ...").getResultSet();

さらに、オブジェクトをDTOとして使用することで利点が得られます。データアクセスやレポートツールが変更された場合でも、DTOクラスを変更する必要はありません(jdbcの代わりにxqueryを使用するか、jasperの代わりにapache-poiを使用するとしましょう。

他のヒント

JdbcTemplateコールバック(ResultSetExtractorなど)内でJasperを呼び出すか、ストレートJDBCを使用してResultSetをJasperに渡すことができます。どちらの方法でも、Jasperを呼び出すと、データベースへの接続はレポートが完了するまでアクティブのままです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top