---開始編寫分頁的存儲過程
---編寫一個包
create or replace package testpackage as
type test_curror is ref cursor;
end testpackage;
這個包和存儲過程要分開執行。要不會提示錯誤
create or replace procedure fenye
( tableName in varchar2,
Pagesize in number,
pageNow in number,
myrows out number,----總記錄數
mypageCount out number,---總頁數
p_cursor out testpackage.test_curror ----傳回的記錄集
) is
--定義部分
---定義一個sql語句。字元串
v_sql varchar2(1000);
-----定義兩個整數
v_begin number:=(pageNow-1)*Pagesize+1;
v_end number:=pageNow*Pagesize;
begin
---執行部分
v_sql:='select * from (select t1.*,rownum rn from (select * from '|| tableName
||') t1 where rownum <='||v_end||') where rn>='||v_begin;
---把遊标和sql關聯
open p_cursor for v_sql;
---計算myrows和myPageCount
---組織了一個SQL語句
v_sql:='select count(*) from '||tableName;
----執行一個SQL,并把傳回的值賦給myrows
execute immediate v_sql into myrows;
---計算mypageCount
if mod(myrows,Pagesize)=0 then
myPageCount:=myrows/Pagesize;
else
myPageCount:=myrows/Pagesize+1;
end if;
---關閉遊标
---close p_
end;
java代碼:
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","hg","hg");
CallableStatement cs=ct.prepareCall("{call fenye(?,?,?,?,?,?)}");
//給問号指派
cs.setString(1, "emp");
cs.setInt(2, 5);//一頁顯示幾條
cs.setInt(3, 1);//第幾頁
//輸出的參數
//返總也記錄數
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
//傳回總頁數
cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
//傳回結果集
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
//取出總記錄數--這裡getInt裡的4是根據你前面該參數的位置決定的
//忘了執行了。。。。
cs.execute();
int rowNum=cs.getInt(4);
int pageCount=cs.getInt(5);
ResultSet rs=(ResultSet)cs.getObject(6);
//顯示結果,測試
System.out.println("總共頁數為"+pageCount+"每頁顯示的頁數為:5");
System.out.println("rowNum:"+rowNum);
System.out.println("總頁數:"+pageCount);
while (rs.next()) {
System.out.println("編号:"+rs.getInt(1)+"姓名:"+rs.getString(2));
}
System.out.println("success!!!!!!!!!!!!!!!!!");
} catch (Exception e) {
// TODO: handle exception
}
看到success!!!!!!的時候說明分頁效果執行了!