spring JdbcTemplate如何返回多個結果集


最近很少發博客,先是去了***公司呆了幾年,完全不能上外網,后來又出來了,能上外網了,但項目太忙一直在打碼,用的語言也從C#換成了JAVA。

好在兩者比較相似,轉起來還算方便,近日在操作sqlserver數據庫的時候發現C#要想獲取多個結果集直接用DataSet里面裝DataTable就可以了,JAVA這

邊輪子非常多,但要做這種需求卻不如C#方便。

目前使用JdbcTemplate操作數據庫,終於找到了一個好的方案,可以實現獲取多結果集,這要感謝 https://weiku.co/article/177/ 博主分享。

以下為demo

 
         
/***
* 獲取多結果集
* @return
*/
public List<List<Map<String, Object>>> getMultiResult() {


String sql = "select 1 select 2 select 3";

List<List<Map<String, Object>>> result = jdbcTemplate.execute(sql, (CallableStatementCallback<List<List<Map<String, Object>>>>) cs -> {
List<List<Map<String, Object>>> list = new ArrayList<>();
boolean execute = cs.execute();

while (execute) {
ResultSet resultSet = cs.getResultSet();
List<Map<String, Object>> subList = new ArrayList<>();
while (resultSet.next()) {
ResultSetMetaData meta = resultSet.getMetaData();
int colcount = meta.getColumnCount();
Map<String, Object> map = new HashMap<>();
for (int i = 1; i <= colcount; i++) {
String name = meta.getColumnLabel(i);
map.put(name, resultSet.getObject(i));
}
subList.add(map);
}
list.add(subList);
execute = cs.getMoreResults();
}
return list;
});
return result;
}
 

最主要的是要用回調對象來做處理,java的泛型由於技術選型跟C#不一樣,所以很多時候並不如C# 方便,但好在編譯器基本能處理這些。

(CallableStatementCallback<List<List<Map<String, Object>>>>) cs -> { 這行代碼非常關鍵,如果不支持lambda表達式,可以實現該接口,傳入具體的實現類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM