Java调用Oracle的分页存储过程
2013-07-26 08:55
465 查看
1. 使用PL/SQL写分页存储过程
2. 使用Java程序调用该存储过程
01 | create or replace procedure pro( |
02 | v_in_table_name in varchar2, --表名 |
03 | v_in_page_size in number, --每页大小 |
04 | v_in_page_now in number, --当前页 |
05 | v_out_page_count out number, --页数 |
06 | v_out_row_count out number, --记录数 |
07 | v_out_result_set out pkg.page_cursor --结果集 |
08 | ) is |
09 | v_sql_stmt varchar2(2000); |
10 | v_start_index number :=v_in_page_size*(v_in_page_now-1)+1; --起始位置 |
11 | v_end_index number :=v_in_page_size*v_in_page_now; --结束位置 |
12 | begin |
13 | v_sql_stmt:= 'select * from (select t.*, rownum rn from (select * from ' ||v_in_table_name|| ')t where rownum<=' ||v_end_index|| ') where rn>=' ||v_start_index; |
14 | open v_out_result_set for v_sql_stmt; --打开游标 |
15 | v_sql_stmt:= 'select count(*)from ' ||v_in_table_name; |
16 | execute immediate v_sql_stmt into v_out_row_count; --查询出记录数 |
17 | --计算页数 |
18 | if mod(v_out_row_count,v_in_page_size)=0 then |
19 | v_out_page_count:=v_out_row_count/v_in_page_size; |
20 | else |
21 | v_out_page_count:=v_out_row_count/v_in_page_size+1; |
22 | end if; |
23 | end ; |
01 | package com.wujilin.procedure; |
02 |
03 | import java.sql.CallableStatement; |
04 | import java.sql.Connection; |
05 | import java.sql.DriverManager; |
06 | import java.sql.ResultSet; |
07 | import java.sql.ResultSetMetaData; |
08 |
09 | public class ProcedureTest { |
10 | public static void
|
11 | String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl" ; |
12 | String username = "scott" ; |
13 | String password = "tiger" ; |
14 | String driver = "oracle.jdbc.driver.OracleDriver" ; |
15 |
16 | try { |
17 | Class.forName(driver); |
18 | Connection conn = DriverManager.getConnection(url, username, password); |
19 | String sql = "{call pro(?,?,?,?,?,?)}" ; |
20 | CallableStatement cstmt = conn.prepareCall(sql); |
21 | // 设置表名 |
22 | cstmt.setString( 1 , "emp" ); |
23 | // 设置每一页的记录数 |
24 | cstmt.setInt( 2 , 4 ); |
25 | // 设置当前页 |
26 | cstmt.setInt( 3 , 2 ); |
27 | // 注册总共的页数 |
28 | cstmt.registerOutParameter( 4 , oracle.jdbc.OracleTypes.INTEGER); |
29 | // 注册总共的记录数 |
30 | cstmt.registerOutParameter( 5 , oracle.jdbc.OracleTypes.INTEGER); |
31 | // 注册结果集 |
32 | cstmt.registerOutParameter( 6 , oracle.jdbc.OracleTypes.CURSOR); |
33 | // 直接执行:execute()方法即可。 |
34 | cstmt.execute(); |
35 | // 将游标强制转换成ResultSet类型。 |
36 | ResultSet rs = (ResultSet)cstmt.getObject( 6 ); |
37 | int pageCount = cstmt.getInt( 4 ); |
38 | System.out.println( "页数:" + pageCount); |
39 | int rowCount = cstmt.getInt( 5 ); |
40 | System.out.println( "记录数:" + rowCount); |
41 | ResultSetMetaData rsmd = rs.getMetaData(); |
42 | while (rs.next()){ |
43 | for ( int i = 0 ; i < rsmd.getColumnCount(); i++){ |
44 | System.out.print(rsmd.getColumnLabel(i + 1 )+ ":" + rs.getObject(i + 1 )+ ", " ); |
45 | } |
46 | System.out.println(); |
47 | } |
48 | } catch (Exception e){ |
49 |
50 | } |
51 | } |
52 | } |
相关文章推荐
- oracle顺序控制语句goto、null和分页过程中输入输出存储、java程序的调用过程
- oracle实现存储过程的分页并用java代码调用存储过程
- java 调用oracle 分页存储过程 返回游标数据集
- java调用Oracle分页存储过程
- pl/sql 编写 Oracle分页的存储过程 Java调用该过程
- Oracle分页存储过程及java的具体调用方法
- java调用oracle分页存储过程示例
- java调用Oracle分页存储过程
- 一个简单的oracle分页存储过程的实现和调用
- java调用分页存储过程
- Java调用Oracle存储过程过程中几个问题
- JAVA调用oracle三种存储过程实例
- {传智播客} (学习笔记)--Java调用存储过程实现Oracle数据库分页
- java下实现调用oracle的存储过程和函数
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- Java调用Oracle集合类型输出参数的存储过程
- oracle 存储过程调用java
- java下实现调用oracle的存储过程和函数
- 一个简单的oracle分页存储过程的实现和调用