Java调用Oracle分页存储过程
2017-10-12 17:35
417 查看
Java调用Oracle分页存储过程
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1, 建一个程序包。如下:
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;2,建立存储过程,存储过程为:
create or replace procedure my_page(v_in_tableName in varchar2,
v_in_pageNow in number,
v_in_pagesize in number,
myrows out number,
myPageCount out number,
p_cursor out testpackage.test_cursor) is
--sql语句
v_sql varchar2(500);
--计算分页数
v_begin number := (v_in_pageNow - 1) * v_in_pagesize + 1;
v_end number := v_in_pageNow * v_in_pagesize;
begin
--拼接sql
v_sql := 'select t2.* from (select t1.*,rownum rn from (select *from ' ||
v_in_tableName || ') t1 where rownum<=' || v_end ||
') t2 where rn>=' || v_begin;
open p_cursor for v_sql;--打开游标
select count(*) into myrows from employee;
if mod(myrows, myPageCount) = 0 then
myPageCount := myrows / v_in_pagesize;
else
myPageCount := myrows / v_in_pagesize + 1;
end if;
end; Java调用的代码:
import java.sql.*;
import oracle.jdbc.OracleCallableStatement;
public class TestProcedurePage {
public TestProcedurePage() {
}
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@10.10.1.29:1521:testdb";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "neb", "testneb");
CallableStatement proc = null; // 创建执行存储过程的对象
// proc = conn.prepareCall("{call p_get_price(?,?,?,?) }"); //设置存储过程
// call为关键字.
proc = conn.prepareCall("{call my_page(?,?,?,?,?,?) }"); // 设置存储过程
/*
* proc.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);
* proc.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
* 下面这样写也可以 proc.registerOutParameter(1,
* oracle.jdbc.OracleTypes.FLOAT); proc.registerOutParameter(2,
* oracle.jdbc.OracleTypes.CHAR); proc.registerOutParameter(3,
* oracle.jdbc.OracleTypes.CURSOR); proc.setString(4, "3");
* //设置第一个输入参数
*/
proc.setString(1, "employee"); // 设置第一个输入参数
proc.setInt(2, 2);
proc.setInt(3, 10);
// 设置普通输出参数
proc.registerOutParameter(4, oracle.jdbc.OracleTypes.NUMBER);
proc.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);
// 设置游标输出参数
proc.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
proc.execute();// 执行
// 获取结果集的方式一:
// rs = (ResultSet) proc.getObject(3);
// 获取结果集的方式二:
rs = ((OracleCallableStatement) proc).getCursor(6);
while (rs.next()) {
System.out.println(rs.getString(1) + "," + rs.getString(2)
+ "," + rs.getString(3) + "," + rs.getString(4));
}
} 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) {
}
}
}
}
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1, 建一个程序包。如下:
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;2,建立存储过程,存储过程为:
create or replace procedure my_page(v_in_tableName in varchar2,
v_in_pageNow in number,
v_in_pagesize in number,
myrows out number,
myPageCount out number,
p_cursor out testpackage.test_cursor) is
--sql语句
v_sql varchar2(500);
--计算分页数
v_begin number := (v_in_pageNow - 1) * v_in_pagesize + 1;
v_end number := v_in_pageNow * v_in_pagesize;
begin
--拼接sql
v_sql := 'select t2.* from (select t1.*,rownum rn from (select *from ' ||
v_in_tableName || ') t1 where rownum<=' || v_end ||
') t2 where rn>=' || v_begin;
open p_cursor for v_sql;--打开游标
select count(*) into myrows from employee;
if mod(myrows, myPageCount) = 0 then
myPageCount := myrows / v_in_pagesize;
else
myPageCount := myrows / v_in_pagesize + 1;
end if;
end; Java调用的代码:
import java.sql.*;
import oracle.jdbc.OracleCallableStatement;
public class TestProcedurePage {
public TestProcedurePage() {
}
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@10.10.1.29:1521:testdb";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "neb", "testneb");
CallableStatement proc = null; // 创建执行存储过程的对象
// proc = conn.prepareCall("{call p_get_price(?,?,?,?) }"); //设置存储过程
// call为关键字.
proc = conn.prepareCall("{call my_page(?,?,?,?,?,?) }"); // 设置存储过程
/*
* proc.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);
* proc.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
* 下面这样写也可以 proc.registerOutParameter(1,
* oracle.jdbc.OracleTypes.FLOAT); proc.registerOutParameter(2,
* oracle.jdbc.OracleTypes.CHAR); proc.registerOutParameter(3,
* oracle.jdbc.OracleTypes.CURSOR); proc.setString(4, "3");
* //设置第一个输入参数
*/
proc.setString(1, "employee"); // 设置第一个输入参数
proc.setInt(2, 2);
proc.setInt(3, 10);
// 设置普通输出参数
proc.registerOutParameter(4, oracle.jdbc.OracleTypes.NUMBER);
proc.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);
// 设置游标输出参数
proc.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
proc.execute();// 执行
// 获取结果集的方式一:
// rs = (ResultSet) proc.getObject(3);
// 获取结果集的方式二:
rs = ((OracleCallableStatement) proc).getCursor(6);
while (rs.next()) {
System.out.println(rs.getString(1) + "," + rs.getString(2)
+ "," + rs.getString(3) + "," + rs.getString(4));
}
} 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) {
}
}
}
}
相关文章推荐
- oracle实现存储过程的分页并用java代码调用存储过程
- Java 调用Oracle 存储过程
- java调用Oracle分页存储过程
- Oracle全文检索建索引,存储过程,以及java方法调用高亮显示
- java调用Oracle用户登录存储过程
- Java,PL/SQL调用 ORACLE存储函数以及存储过程
- java 调用oracle中存储过程与调用function函数两例
- java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)
- oracle pl/sql之java中调用oracle有参存储过程
- java调用oracle带有返回值的存储过程
- Oracle分页存储过程及java的具体调用方法
- JAVA调用Oracle分页SQL用法
- java调用Oracle用户登录存储过程
- java 调用 oracle 存储过程
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- java 调用存储过程实现分页 sql server 2012 版
- java调用ORACLE 存储过程返回值
- oralce用存储过程实现分页 以及 用java调用这个存储过程的代码
- java 调用oracle 分页存储过程 返回游标数据集