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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM