Oracle数据库使用存储过程实现分页
2016-11-18 09:48
344 查看
注:本示例来源于韩顺平[10天玩转oracle数据库]视频教程
1、创建包同时创建游标
2、创建分页存储过程
3、java调用分页存储过程(完整)源代码
1、创建包同时创建游标
create or replace package pagingPackage is type paging_cursor is ref cursor; end; /
2、创建分页存储过程
create or replace procedure paging_cursor ( v_in_table in varchar2, v_in_pagesize in number, v_in_pagenow in number, v_out_result out pagingPackage.paging_cursor, v_out_rows out number, v_out_pagecount out number ) is --定义需要的变量 v_sql varchar2(4000); v_sql_select varchar2(4000); v_start number; v_end number; begin --计算v_start和v_end是多少 v_start:=v_in_pagesize*(v_in_pagenow-1)+1; v_end:=v_in_pagesize*v_in_pagenow; v_sql:='select t2.* from (select t1.*,rownum rn from (select * from '||v_in_table||') t1 where rownum<='||v_end||') t2 where rn>='||v_start; --打开游标,让游标指向结果集 open v_out_result for v_sql; --查询共有多少条记录 v_sql_select:='select count(*) from '||v_in_table; execute immediate v_sql_select into v_out_rows; --统计多少页记录 if mod(v_out_rows,v_in_pagesize)=0 then v_out_pagecount:=v_out_rows/v_in_pagesize; else v_out_pagecount:=v_out_rows/v_in_pagesize+1; end if; --关闭游标 close v_out_result; end; /
3、java调用分页存储过程(完整)源代码
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; public class TestProcedurePaging { // 调用oracle分页存储过程并获得存储过程的返回结果集。 public static void main(String[] args) { // 定义需要的变量 Connection ct = null; CallableStatement cs = null; ResultSet rs = null; try { // 加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); // 得到连接 ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger"); // 创建CallableStatement接口 cs = ct.prepareCall("{call paging_cursor(?,?,?,?,?,?)}"); // 给in?赋值 cs.setString(1, "emp");// 传表名 cs.setInt(2, 6);// 传入pagesize,每页显示多少条记录 cs.setInt(3, 1);// 传入pagenow,显示第几页。 // 给out?注册 cs.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR); cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); cs.registerOutParameter(6, oracle.jdbc.OracleTypes.INTEGER); // 执行 cs.execute(); // 这里是关键所在,java没有接收结果集的get方法,所以只能用getObject来接收结果集,接收到后需要使用ResultSet强转才可以 rs = (ResultSet) cs.getObject(4); // 循环取出 while (rs.next()) { System.out.println(rs.getString("ename") + " " + rs.getString("sal")); } // 取出总记录数 int rowCount = cs.getInt(5); // 取出总页数 int pageCount = cs.getInt(6); System.out.println("共有记录:" + rowCount + "条! " + "共有记录:" + pageCount + "页!"); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 try { if (cs != null) { cs.close(); } if (rs != null) { rs.close(); } if (ct != null) { ct.close(); } } catch (Exception e) { e.printStackTrace(); } cs = null; rs = null; ct = null; } } }
相关文章推荐
- 使用系统存储过程实现的通用分页存储过程
- MySQL变量使用及数据库存储过程实现分页
- 12-19 DataList使用存储过程实现分页
- Datalist控件使用存储过程来分页实现代码
- asp.net下Repeater使用 AspNetPager分页控件 不用存储过程 完美实现
- SQL Server:使用系统存储过程实现的通用分页存储过程
- 模拟网易邮箱实现全选,全不的功能/使用DataList实现 加入购物车,编辑,删除,更新,取消功能。/试完成Datalist使用存储过程来分页
- DropDownList使用存储过程实现分页
- [参考]一个ASP.Net的DataGrid分页控件,在Oracle数据库下,每次只取当前页的数据,不使用存储过程
- 一、 使用存储过程实现数据分页(Sql Server 2008 R2)
- 数据库分页处理--使用存储过程实现
- 1 用存储过程实现分页,除了上一页,下一页,第一页,和末页外还要有go按钮,以及go到那里的文本框。另外还要在Lable显示“当前x页,一共y页”。注意验证控件的使用和 链接存储过程的内容。
- 使用存储过程实现分页效果
- 在ASP.NET高级中运用DataList使用存储过程实现分页
- SQL Server2000 索引结构及其使用 (实现小数据量和海量数据的通用分页显示存储过程)
- 在MS SQLServer中使用存储过程实现通用分页
- 使用系统存储过程实现的通用分页存储过程
- 使用系统存储过程实现的通用分页存储过程.sql
- oracle中使用存储过程实现分页
- oracle 使用存储过程实现分页(初学者,请各位大神指教)