zoukankan      html  css  js  c++  java
  • jdbc调用存储过程获取多个结果集

    jdbc调用存储过程获取多个结果集
    2017年07月26日 21:20:22 Kenny-Liu 阅读数:1486
    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/L2388399752/article/details/76165734
    这几天,公司重构一套erp,用到很多存储过程,但我在用jdbc调用存储过程的时候发现无法接收多个结果集(存储过程select返回的Result),而且国内很难找到解决方案,今天下午花了一下午,最后终于实现了。
    
        Connection conn = JdbcUtil.getConnection();
         
                CallableStatement stmt = null;
         
                //通过sqlserver exec方法调用存储过程
                stmt = conn.prepareCall("EXEC dbo.sp_Query_GetVehiceTimeOuts '01'");
                //jdbc通用语法为
        //        stmt = conn.prepareCall("{call dbo.sp_Query_GetVehiceTimeOuts(?)}");
        //        stmt.setString(1, "01");
         
         
                boolean hashResult = stmt.execute();
                while (true) {
                    //判断本次循环是否为数据集
                    if (hashResult) {
                        System.out.println("为数据集");
                        ResultSet rs = stmt.getResultSet();
                        // Do something with resultset ...
                        while (rs.next()){
                            System.out.println(rs.getString(1));
                        }
                    } else {
                        System.out.println("本次不为数据集");
                        int updateCount = stmt.getUpdateCount();
                        if (updateCount == -1) {
                            /*
                                当updateCount为-1时,
                                代表存储过程返回的最后一条数据集
                                跳出循环
                            */
                            System.out.println("最后一次");
                            break;
                        }
                        // Do something with update count ...
                    }
                    /*
                        每次判断下一个是否为了数据集
                        stmt.getMoreResults() 为 true表示下一次循环为数据集,false为空
                     */
                    hashResult = stmt.getMoreResults();
                    System.out.println(hashResult);
                }
    
    
    大体的逻辑就是
    
    首先是死循环,
    
    然后判断提交sql返回的收个数据是否为结果集,
    
    如果是就进入结果集处理,如果不是,通过getUpdateCount方法获取下一个结果,并判断getUpdateCount结果是否为-1,-1代表最后一条结果集,当结果为-1时跳出循环,否则继续循环该段代码
  • 相关阅读:
    WinowsXP 任务栏无法显示当前运行程序图标
    日志记录组件[Log4net]详细介绍(转)
    桌面上的IE图标变成了快捷方式那种图标 怎么还原回来
    面试必须要知道的SQL语法,语句(转载)
    兼容 火狐 IE 的JS时间控件 任意格式 年月日时分秒
    Nagios远程监控软件的安装与配置详解(1)
    linux集群 负载均衡实验笔记
    PHPB2B 模板 标签
    PHP 去除 HTML 回车 换行 空格
    OpenX参考网址
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/10973620.html
Copyright © 2011-2022 走看看