spring JdbcTemplate如何返回多个结果集

Posted lclblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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表达式,可以实现该接口,传入具体的实现类。

以上是关于spring JdbcTemplate如何返回多个结果集的主要内容,如果未能解决你的问题,请参考以下文章

不确定如何使用 Spring jdbcTemplate 和 PreparedStatementSetter 返回生成的列 ID 值

如何使用 JdbcTemplate 在 Spring 中简洁地调用 PL/SQL 过程并返回其输出变量?

使用 Spring JdbcTemplate 进行多个数据库操作

Spring JdbcTemplate - 插入 blob 并返回生成的密钥

Spring的JdbcTemplate查询数据库时,使用queryForList().get(0)返回单行查询时会产生异常,请问如何避免?

如何让 spring JdbcTemplate 读取_未提交?