添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
编程技术
  • 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;
    }

    参考资料