最近很少發博客,先是去了***公司呆了幾年,完全不能上外網,后來又出來了,能上外網了,但項目太忙一直在打碼,用的語言也從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表達式,可以實現該接口,傳入具體的實現類。