zoukankan      html  css  js  c++  java
  • java连接oracle数据库调用存储过程实现分页查询(emp为例)

    第一步:建一个含游标类型的包

    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();}

    }

    }

  • 相关阅读:
    细说WebSocket -- Node.js篇
    跨域CORS原理及调用具体示例
    详解5种跨域方式及其原理
    java后台对json格式数据的解析
    serializeArray()和.serialize()的区别、联系
    JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
    Jquery 遍历数组之$().each方法与$.each()方法介绍
    JQuery.Ajax()的data参数类型
    并发,并行,进程,线程,同步,异步
    Java之控制反转和依赖注入
  • 原文地址:https://www.cnblogs.com/viagraHero/p/5041890.html
Copyright © 2011-2022 走看看