首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 呼叫 SQL Server 分頁預存程序實作(二):完整 Java 代碼與多結果集處理

     編輯:Java 相關知識

Java 端呼叫預存程序完整代碼

package test;

import java.sql.*;

public class Study3 {
    private Connection con;
    private ResultSet rs;
    private CallableStatement callsta;
    private String user = "sa";
    private String pwd = "sa";

    public Study3() {
        try {
            // 1. 載入驅動
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            String url = "jdbc:microsoft:sqlserver://localhost:1433;databasename=test";
            con = DriverManager.getConnection(url, user, pwd);

            // 2. 準備呼叫預存程序 {call Paging(?,?,?)}
            String sql = "{call Paging(?,?,?)}";
            callsta = con.prepareCall(sql);
            callsta.setString(1, "select * from T_employee"); // 查詢 SQL
            callsta.setInt(2, 1);                              // 當前頁碼
            callsta.setInt(3, 3);                              // 每頁筆數

            // 3. 處理多結果集
            StringBuffer sb = new StringBuffer();
            int rsNum = 0;
            int updateCount = -1;
            boolean hasResult = callsta.execute(); // 僅指示第一個結果是否為 ResultSet

            do {
                updateCount = callsta.getUpdateCount();
                if (updateCount != -1) { // 更新計數
                    System.out.println("..當前為更新計數..");
                    callsta.getMoreResults();
                    continue;
                }

                rs = callsta.getResultSet();
                if (rs != null) { // 結果集
                    rsNum++;
                    System.out.println("結果集編號: " + rsNum);
                    ResultSetMetaData meta = rs.getMetaData();
                    int cols = meta.getColumnCount();
                    while (rs.next()) {
                        for (int i = 1; i <= cols; i++) {
                            sb.append(rs.getString(i)).append(" ");
                        }
                    }
                    rs.close();
                    callsta.getMoreResults();
                    continue;
                }

                // 無更新計數也無結果集 -> 結束
                System.out.println(sb.toString());
            } while (!(updateCount == -1 && rs == null));

            // 4. 取得輸出參數(如有)
            // callsta.getXXX(n);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Study3();
    }
}

關鍵點解析

  1. CallableStatement:JDBC 標準介面呼叫預存程序,支援 IN/OUT/INOUT 參數。
  2. 多結果集處理迴圈:預存程序可能回傳多個結果集(如分頁資訊、實際資料)。需用 getUpdateCount() 與 getResultSet() 交替檢查,配合 getMoreResults() 移動到下一個結果。
  3. ResultSetMetaData:動態取得欄位數與名稱,支援通用列印邏輯。
  4. 資源管理:實務中應使用 try-with-resources (JDK 7+) 確保 Connection/Statement/ResultSet 正確關閉。

對應的 SQL Server 預存程序

參考上一篇(ID: 110626)Paging 預存程序,使用游標實現分頁,回傳總頁數、總筆數、當前頁碼與分頁資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved