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时跳出循环,不然继续循环该段代码
相关文章
相关标签/搜索