编程技术
17
建站技术
电脑技术
资源分享
14
影视媒体
1
生活笔记
1
好物分享
此文章发布于
64
个月前,部分信息可能已经
过时
,请自行斟酌确认。
我能不能先抱怨一下:习惯了使用
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;
}
参考资料
JdbcTemplate 一次执行多个 select 语句返回多个数据集
我能不能先抱怨一下:习惯了使用
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;
}
参考资料