Pregunta

Estoy usando el soporte de Spring para JDBC. Me gustaría usar JdbcTemplate (o SimpleJdbcTemplate) para ejecutar una consulta y obtener el resultado como una instancia de ResultSet.

La única forma que puedo ver de lograr esto es usando:

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

Un inconveniente obvio de este enfoque es que me obliga a hacer una suposición (mediante el lanzamiento) sobre el tipo de implementación de SqlRowSet, pero ¿hay una mejor manera?

Información de fondo ...

La razón por la que quiero obtener los resultados como un ResultSet, en lugar de una colección de beans, es porque los resultados se pasarán directamente a un informe de Jasper para su visualización. En otras palabras, el bean Java solo se usaría para almacenar temporalmente cada fila en el ResultSet, y me gustaría evitar crear dicho bean para cada informe de Jasper, si es posible.

Saludos, Don

¿Fue útil?

Solución

Si solo quieres realizar una consulta y obtener los resultados, ¿por qué no usas plain jdbc y tomas el conjunto de resultados? Tenga en cuenta que no necesita Spring para hacer esto.

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

Además, obtienes una ventaja al usar un objeto como DTO. No necesita cambiar su clase DTO incluso si su acceso a datos o su herramienta de informe cambian (digamos que comienza a usar xquery en lugar de jdbc o usa apache-poi en lugar de jasper.

Otros consejos

Puede invocar a Jasper dentro de una devolución de llamada JdbcTemplate (como un ResultSetExtractor) o usar JDBC directo para pasar el ResultSet a Jasper. De cualquier manera, cuando llame a Jasper, su conexión a la base de datos seguirá activa hasta que finalice su informe.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top