java调用Oracle数据库返回游标分页的代码
/**
*
*/
package com.xbkj.cursorProcedure;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author Administrator
*
*/
public class marks {
/**
* @param args
*/
public static void main(String[] args) {
String driver="oracle.jdbc.driver.OracleDriver";
String password = "xmgl";
String username = "xmgl";
String url = "jdbc:oracle:thin:@localhost:1521:xmgl";
try {
Class.forName(driver);
Connection cn = DriverManager.getConnection(url, username, password);
CallableStatement ca = cn.prepareCall("{call cursos.dept_test(?,?,?,?,?,?)}");
//给?赋值
ca.setString(1, "dept");
ca.setInt(2, 5);
ca.setInt(3, 1);
//注册一个总记录数
ca.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
//注册一个总页数
ca.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
//注册返回的结果集
ca.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
ca.execute();
int rownum=ca.getInt(4);//注册总记录数
int pagecount=ca.getInt(5);//注册一个总页数
System.out.println("总记录数"+rownum);
System.out.println("总页数"+pagecount);
ResultSet rs=(ResultSet) ca.getObject(6);
while(rs.next()){
System.out.println("编号:"+rs.getInt(1)+" 部门名称:"+rs.getString(2));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Oracle存储过程分页返回游标的代码
1、 Oracle创建包的代码
create or replace package cursos is type dept is ref cursor; procedure dept_test( tables in varchar2,--传入一个表 pageSize in number,--传入每页大小 pagecount in number,--传一个页数 myrows out number,--返回一个总记录数 mypageCount out number,--返回一个总页数 depts out cursos.dept--返回一个结果集 ); end;
2、创建Oracle包体的代码
create or replace package body cursos is
procedure dept_test(
tables in varchar2,--传入一个表
pageSize in number,--每页大小
pagecount in number,--传入一个页数
myrows out number,--返回一个总记录数
mypageCount out number,--返回一个总页数
depts out cursos.dept--返回一个结果集
)is
v_sql varchar2(2000);
v_begin number:=(pagecount-1)*pageSize+1;
v_end number:=pagecount*pageSize;
begin
--拼接sql语句
v_sql:='select * from(select t1.*,rownum rn from (select * from '|| tables||') t1
where rownum<='||v_end||') where rn>='||v_begin||'';
--打开游标
open depts for v_sql;
v_sql :='select count(*) from '||tables||'';
--执行SQL语句并把返回的值赋给myrows
execute immediate v_sql into myrows;
if mod(myrows,pageSize)=0 then
mypageCount :=myrows/pageSize;
else
mypageCount :=myrows/pageSize+1;
end if;
end;
end;
如有更好的建议可以给我留言谢谢!