JdbcTemplate 一次执行多个 select 语句返回多个数据集

此文章发布于 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;
    });
}

参考资料

最后修改:2019 年 05 月 03 日 11 : 30 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论