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();
}
}
getUpdateCount() 與 getResultSet() 交替檢查,配合 getMoreResults() 移動到下一個結果。參考上一篇(ID: 110626)Paging 預存程序,使用游標實現分頁,回傳總頁數、總筆數、當前頁碼與分頁資料。