Вопрос

Я использую поддержку Spring для JDBC. Я хотел бы использовать JdbcTemplate (или SimpleJdbcTemplate) для выполнения запроса и получения результата в качестве экземпляра ResultSet.

Единственный способ добиться этого - использовать:

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

Очевидным недостатком этого подхода является то, что он требует от меня предположения (путем приведения) о типе реализации SqlRowSet, но есть ли лучший способ?

Справочная информация ...

Причина, по которой я хочу получить результаты в виде ResultSet, а не коллекции bean-компонентов, заключается в том, что результаты будут переданы прямо в отчет Jasper для отображения. Другими словами, Java-бин будет использоваться только для временного хранения каждой строки в ResultSet, и я хотел бы по возможности избегать создания такого бина для каждого отчета Jasper.

Ура, Дон

Это было полезно?

Решение

Если вы хотите просто выполнить запрос и получить результаты, почему бы вам не использовать простой jdbc и не получить набор результатов? Обратите внимание, что вам не нужна весна, чтобы сделать это.

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

Кроме того, вы получаете преимущество, используя объект в качестве DTO. Вам не нужно менять свой класс DTO, даже если изменяется доступ к данным или инструмент отчетов (допустим, вы начали использовать xquery вместо jdbc или вы используете apache-poi вместо jasper.

Другие советы

Вы можете либо вызвать Jasper внутри обратного вызова JdbcTemplate (например, ResultSetExtractor), либо использовать прямой JDBC для передачи ResultSet в Jasper. В любом случае, когда вы звоните в Jasper, ваше соединение с базой данных остается активным, пока ваш отчет не будет завершен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top