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时跳出循环,否则继续循环该段代码