Pergunta

Eu estou usando o apoio da Primavera para JDBC. Eu gostaria de usar JdbcTemplate (ou SimpleJdbcTemplate) para executar uma consulta e obter o resultado como uma instância de ResultSet.

A única maneira que eu posso ver de conseguir isso é usando:

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

Uma lacuna evidente desta abordagem é que ela me obriga a fazer uma suposição (por vazamento) sobre o tipo implementação de SqlRowSet, mas há uma maneira melhor?

info fundo ...

A razão de eu querer obter os resultados como um ResultSet, ao invés de uma coleção de feijão, é porque os resultados serão transmitidos direto para um relatório Jasper para exibição. Em outras palavras, o feijão Java seria usado para nada mais do que armazenar temporariamente cada linha no ResultSet, e eu gostaria de evitar a criação de um tal de feijão para cada relatório de Jasper, se possível.

Cheers, Don

Foi útil?

Solução

Se você quiser apenas executar uma consulta e obter os resultados, por que não usar jdbc simples e agarrar o conjunto de resultados? Observe que você não precisa de mola para fazer exatamente isso.

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

Além disso, você obtém uma vantagem usando um objeto como um DTO. Você não precisa mudar sua classe DTO mesmo que seu acesso de dados ou as alterações de ferramentas de relatório (digamos que você começar a usar xquery vez de jdbc ou você usar apache-poi vez de Jasper.

Outras dicas

Você pode invocar Jasper dentro de um callback JdbcTemplate (como um ResultSetExtractor) ou usar reta JDBC para passar o ResultSet para Jasper. De qualquer forma, quando você chamar Jasper sua conexão com o banco de dados ainda está ativo até que seu relatório for concluído.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top