Domanda

Sto usando il supporto di Spring per JDBC. Vorrei usare JdbcTemplate (o SimpleJdbcTemplate) per eseguire una query e ottenere il risultato come istanza di ResultSet.

L'unico modo che posso vedere per raggiungere questo obiettivo è usare:

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

Un ovvio difetto di questo approccio è che mi richiede di fare un'ipotesi (lanciando) sul tipo di implementazione di SqlRowSet, ma esiste un modo migliore?

Informazioni sullo sfondo ...

Il motivo per cui voglio ottenere i risultati come ResultSet, piuttosto che una raccolta di bean, è perché i risultati verranno passati direttamente a un report Jasper per la visualizzazione. In altre parole, il bean Java verrebbe utilizzato solo per l'archiviazione temporanea di ogni riga nel ResultSet e, se possibile, vorrei evitare di creare tale bean per ogni report di Jasper.

Saluti, Don

È stato utile?

Soluzione

Se vuoi semplicemente eseguire una query e ottenere i risultati, perché non usi jdbc e prendi il set di risultati? Nota che non hai bisogno della primavera per fare proprio questo.

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

Inoltre, ottieni un vantaggio usando un oggetto come DTO. Non è necessario modificare la classe DTO anche se il tuo accesso ai dati o lo strumento di report cambiano (supponiamo che inizi a utilizzare xquery invece di jdbc o usi apache-poi invece di jasper.

Altri suggerimenti

Puoi richiamare Jasper all'interno di un callback JdbcTemplate (come un ResultSetExtractor) o usare JDBC direttamente per passare il ResultSet a Jasper. In ogni caso, quando chiami Jasper, la tua connessione al database è ancora attiva fino al termine del rapporto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top