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時跳出循環,不然繼續循環該段代碼