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時跳出循環,不然繼續循環該段代碼
相關文章
相關標籤/搜索