Question

J'utilise le support de Spring pour JDBC. J'aimerais utiliser JdbcTemplate (ou SimpleJdbcTemplate) pour exécuter une requête et obtenir le résultat en tant qu'instance de ResultSet.

La seule façon dont je peux réaliser cela consiste à utiliser:

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

Un inconvénient évident de cette approche est qu’elle nécessite que je fasse une hypothèse (en définissant un casting) sur le type d’implémentation de SqlRowSet, mais existe-t-il un meilleur moyen?

Informations générales ...

La raison pour laquelle je souhaite obtenir les résultats sous forme de ResultSet, plutôt que d'une collection de beans, est parce que les résultats seront transmis directement à un rapport Jasper pour affichage. En d’autres termes, le bean Java ne serait utilisé que pour stocker temporairement chaque ligne dans le ResultSet et je voudrais éviter de créer un tel bean pour chaque rapport Jasper, si possible.

Cordialement, Don

Était-ce utile?

La solution

Si vous souhaitez simplement effectuer une requête et obtenir les résultats, pourquoi ne pas utiliser plain jdbc et récupérer les résultats? Notez que vous n’avez pas besoin du printemps pour faire cela.

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

En outre, vous bénéficiez d’un avantage en utilisant un objet comme DTO. Vous n'avez pas besoin de changer votre classe DTO même si votre accès aux données ou votre outil de rapport change (supposons que vous commenciez à utiliser xquery au lieu de jdbc ou que vous utilisiez apache-poi au lieu de jasper.

Autres conseils

Vous pouvez invoquer Jasper dans un rappel JdbcTemplate (comme un ResultSetExtractor) ou utiliser du JDBC direct pour transmettre le ResultSet à Jasper. Dans tous les cas, lorsque vous appelez Jasper, votre connexion à la base de données reste active jusqu'à la fin de votre rapport.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top