2008-10-17 41 views
4

我正在使用Spring對JDBC的支持。我想使用JdbcTemplate(或SimpleJdbcTemplate)來執行查詢並將結果作爲ResultSet的實例獲取。來自Spring-JDBC的getResultSet

,我可以看到實現這一目標的唯一方法是使用:

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

這種方法的一個明顯的缺點是,它要求我做一個假設(通過鑄造)關於實現類型SqlRowSet的,但有沒有更好的方法?

背景信息...

我想獲得的結果作爲一個結果,而不是豆集合究其原因,是因爲其結果將直接傳遞給顯示器的碧玉報告。換句話說,除了將每行臨時存儲在ResultSet中之外,Java bean將只用於其他任何事情,並且我希望儘可能避免爲每個Jasper報告創建一個這樣的bean。

乾杯,唐

回答

1

如果你想只執行一個查詢,得到的結果,你爲什麼不使用純JDBC和搶結果集?注意你不需要彈簧就可以做到這一點。

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

此外,通過使用對象作爲DTO可以獲得優勢。你不需要改變你的DTO類,即使你的數據訪問或你的報表工具發生了變化(假設你開始使用xquery而不是jdbc,或者你使用apache-poi而不是jasper)

0

你可以在裏面調用Jasper一個JdbcTemplate回調函數(比如一個ResultSetExtractor)或者直接使用JDBC將ResultSet傳遞給Jasper。無論哪種方式,當你調用Jasper時,你的連接到數據庫仍然是活動的,直到你的報表完成。