设为首页 收藏本站
查看: 677|回复: 0

[经验分享] java调用oracle的存储过程分页代码

[复制链接]

尚未签到

发表于 2016-7-28 06:34:07 | 显示全部楼层 |阅读模式
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;

  
  
  
  如有更好的建议可以给我留言谢谢!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250297-1-1.html 上篇帖子: java操作oracle数据库中的blob字段 下篇帖子: oracle学习之系统结构(1)--常见术语解析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表