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