標籤:
第一步:建一個含遊標類型的包
sql>create or replace package testPackage
as type test_cursor is ref cursor; --定義名為test_cursor 的遊標
end testPackage;
第二步:編寫分頁的預存程序
sql>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_cursor--返回的記錄集
) is
--定義部分 sql語句字串,以及兩個變數
v_sql varchar(1000);
v_begin number:=(pageNow-1)*pageSize+1;
v_end number:=pageSize*pageNow;
--執行部分
begin
v_sql:=‘select * from (select a1.*,rownum rn from (select * from ‘||tableName||‘) a1 where
rownum<=‘||v_end||‘) where rn>=‘||v_begin;
open P_cursor for v_sql; --遊標關聯sql
v_sql:=‘select count (*) from ‘||tableName;
execute immediate v_sql into myRows;
if mod(myRows,pageSize)=0 then
myPageCount:=myRows/pageSize;
else
myPageCount:=myRows/pageSize+1;
end if;
close P_cursor;
end;
/
第三步 java調用該過程 記得引進jar 包
import java.sql.*;
public class fenYe {
public static void main(String [] args){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","tiger"); // ORCL 位元據庫名
CallableStatement cs=ct.prepareCall("{call fenYe(?,?,?,?,?,?)}");
//給?賦值
cs.setString(1,"emp");
cs.setInt(2,5);//每頁顯示5行
cs.setInt(3,2);// 顯示第二頁
// 註冊傳回值
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);
cs.execute();//執行
int rowNum=cs.getInt(4);
int pageCount=cs.getInt(5);
ResultSet rs=(ResultSet)cs.getObject(6);
System.out.println("rowNum"+rowNum);
System.out.println("總頁數:"+pageCount);
while(rs.next()){
System.out.println("編號:"+rs.getInt(1)+"名字:"+rs.getString(2));}
}catch(Exception e){
e.printStackTrace();}
}
}
java串連oracle資料庫調用預存程序實現分頁查詢(emp為例)