- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class TestPage {
- public TestPage() {
- }
- public static void main(String[] args) {
- String driver = "oracle.jdbc.driver.OracleDriver";
- String strUrl = "jdbc:oracle:thin:@localhost:1521:xmgl";
- String username = "xmgl";
- String password = "xmgl";
- Statement stmt = null;
- ResultSet rs = null;
- Connection conn = null;
- try {
- Class.forName(driver);
- conn = DriverManager.getConnection(strUrl, username, password);
- System.out.println("ok");
- CallableStatement cs = null;
- //创建CallableStatement
- cs = conn.prepareCall("{call page.fenye(?,?,?,?,?,?)}");
- cs.setString(1, "mytest");//表名
- cs.setInt(2, 3);//显示几条记录
- 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);
- cs.execute();
- //取出总记录数 /这里要注意,getInt(4)中4,是由该参数的位置决定的
- int rowNum=cs.getInt(4);//获得输出参数
- int pageCount = cs.getInt(5);
- 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)+" 密码:"+rs.getString(3));
- }
- } catch (SQLException ex2) {
- ex2.printStackTrace();
- } catch (Exception ex2) {
- ex2.printStackTrace();
- } finally {
- try {
- if (rs != null) {
- rs.close();
- if (stmt != null) {
- stmt.close();
- }
- if (conn != null) {
- conn.close();
- }
- }
- } catch (SQLException ex1) {
- }
- }
- }
- }
存储语句:
- create or replace package page is
- type test_cursor is ref cursor;
- procedure fenye(tableName in varchar2,pageSize in number,pageNow in number,myRows out number,myPageCount out number,p_cursor out page.test_cursor);
- end;
- create or replace package body page is
- procedure fenye(
- tableName in varchar2,
- pageSize in number,--一页显示记录数
- pageNow in number,--第几页
- myRows out number,--总记录数
- myPageCount out number,--总页数
- p_cursor out page.test_cursor--返回的记录集
- )
- 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||' order by userid asc ';
- --把游标和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 myrows%Pagesize=0 then 这样写是错的
- if mod(myRows,pageSize)=0 then
- myPageCount:=myrows/pageSize;
- else
- myPageCount:=myrows/pageSize+1;
- end if;
- --关闭游标
- --close p_cursor;
- end;
- end;
注:如果出现“Error: PLS-00103: 出现符号 "CREATE" Line”,可能是因为:包与包体的执行(编译)没有分开进行,得分开进行!