天天看點

Oracle學習筆記之存儲過程(2)java調用存儲過程實作分頁效果demo

---開始編寫分頁的存儲過程

---編寫一個包

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!!!!!!的時候說明分頁效果執行了!