Frage

Ich verwende Spring Unterstützung für JDBC. Ich möchte JdbcTemplate (oder SimpleJdbcTemplate) zum ausführen einer Abfrage und das Ergebnis als eine Instanz von ResultSet erhalten.

Die einzige Möglichkeit, die ich sehe, kann dies zu erreichen, verwendet:

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

Ein offensichtlicher Nachteil dieses Ansatzes ist, dass es mir erfordert eine Annahme zu machen (durch Gießen) über die Umsetzung Art von SqlRowSet, aber gibt es einen besseren Weg?

Hintergrundinfo ...

Der Grund, warum ich die Ergebnisse als ResultSet erhalten will, anstatt eine Sammlung von Bohnen, weil die Ergebnisse werden direkt an einen Jasper-Bericht für die Anzeige übergeben werden. Mit anderen Worten, würde die Java-Bean für nichts anderes als vorübergehend verwendet werden, um jede Zeile in der Ergebnismenge zu speichern, und ich würde eine solche Bohne für jeden Jasper Bericht erstellen, wenn möglich, zu vermeiden, wie zu schaffen.

Cheers, Don

War es hilfreich?

Lösung

Wenn Sie wollen einfach nur eine Abfrage durchführen und die Ergebnisse zu erhalten, warum Sie nicht schlicht jdbc verwenden und die resultset greifen? Beachten Sie, dass Sie keine Feder tun müssen, um nur diese.

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

Außerdem hat du einen Vorteil erhalten, indem ein Objekt als DTO verwendet wird. Sie brauchen nicht Ihre DTO-Klasse zu ändern, auch wenn Sie Ihre Daten Acess oder Ihrem Bericht Werkzeugwechsel (sagen wir, Sie statt jdbc mit xquery starten, oder Sie verwenden Apache-poi statt Jaspis.

Andere Tipps

Sie können entweder aufrufen Jasper in einem JdbcTemplate Rückruf (wie ein ResultSetExtractor) oder gerade JDBC verwenden, um die ResultSet zu Jasper zu übergeben. So oder so, wenn Sie Jasper Ihre Verbindung zur Datenbank nennen, ist immer noch aktiv, bis der Bericht fertig ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top