对于我们使用JdbcTemplate时想要获取多个结果集而无从下手的问题我从百度也搜到了一些答案,但是使用起来不是我预想的那个结果,所以我就借鉴别人的对自己所使用的的进行了一些小改动。代码如下:
private List<Map<String, Object>> getMultiDataSet( String sql) {
return jdbcTemplate.execute(sql, (CallableStatementCallback<List<Map<String, Object>>>) cs -> {
boolean resultsAvailable = cs.execute();
List<Map<String, Object>> list = new ArrayList<>();
//遍历结果集
while (resultsAvailable) {
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++) {
//name:获取查询出来的sql语句的字段名称
String name = meta.getColumnLabel(i);
//将字段名称添加到map中并将数据结合
map.put(name, resultSet.getObject(i));
}
/* subList.add(map);*/
list.add(map);
}
resultsAvailable = cs.getMoreResults();
}
return list;
});
}`
如果你是想分的更多更复杂的话你可以将返回值修改还有将我所注释的地方和CallableStatementCallback
后面对应的类型修改即可(sql的类型是select 查询sql)
最后奉上我所参考的链接:https://weiku.co/article/177/