此文章发布于68
个月前,部分信息可能已经过时
,请自行斟酌确认。
我能不能先抱怨一下:习惯了使用C#
的DataSet、DataTable
处理数据,真是的相当的好用,转到Java
真的是非常的不习惯,一会List<Map<String,Object>
,一个List<List<Map<String,Object>>
好痛苦。
这不现在为了一次执行多个select
获取多个结果表让我好为难,不过最终还是解决了。
JdbcTemplate 一次获取多个结果集
废话不多说直接看代码,然后还想吐槽baidu
搜索这个是很难找到想要的答案,相反google
一搜索就会找到。
来自stackoverflow
的解决方案,微酷有改动,原文是存储过程,我这里是 select 语句:
/**
* 获取多个结果集
*
* @param sql 返回多个结果集的 sql 语句,一般用分号分隔
* @return
*/
private List<List<Map<String, Object>>> getMultiDataSet(final String sql) {
return jdbc.execute(sql, (CallableStatementCallback<List<List<Map<String, Object>>>>) cs -> {
boolean resultsAvailable = cs.execute();
List<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++) {
String name = meta.getColumnLabel(i);
map.put(name, resultSet.getObject(i));
}
subList.add(map);
}
list.add(subList);
resultsAvailable = cs.getMoreResults();
}
return list;
});
}