java 调用存储过程进行批处理
2009-09-17 00:00:00 来源:WEB开发网先创建两个存储过程
下面这个事返回一个值的(指定员工的工资)
create or replace procedure pro_query_name (myno in number ,myname out varchar2)
as
begin
select ename into myname from emp where empno = myno;
end;
下面这个是返回一个ResultSet对象(指定员工的所有信息)
--------根据员工的职位查询该职位的员工信息----
/**
创建包头
*/
create or replace package pkg_emp
as
---定义游标类型---
type cur_type is ref cursor;
--声明存储过程---
procedure proc_query_emps(pjob varchar2,empsinfo out cur_type);
end pkg_emp;
------
create or replace package body pkg_emp
as
--声明存储过程---
procedure proc_query_emps(pjob varchar2,empsinfo out cur_type)
as
begin
open empsinfo for select * from emp where job=pjob;
end proc_query_emps;
end pkg_emp;
下面的程序是通过Java客户端来调用存储过程:
package cn.com.jdbc.procedure;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.jdbc.OracleTypes;
public class CallProcedure {
private DBConnection con;
private Connection conn = null;
private CallableStatement callStmt = null;
private ResultSet rs = null;
/**
* @param args
*/
public static void main(String[] args) {
CallProcedure test = new CallProcedure();
test.callPro();
System.out.println("-----------------------");
test.callRsPro();
}
/**
* Java客户端调用存储过程的步骤: 1.建立存储过程 2,利用{call 过程名 通过预处理}来调用
* 3,根据存储过程的参数列表来建立Java与Oracle的参数映射关系 4,执行 5,获得处理过程的返回值
*/
/**
* 接收一个返回值的方法
*/
public void callPro() {
con = new DBConnection();
conn = con.getDBConnection();
try {
// 通过Java客户端调用存储过程的命令格式:{}
callStmt = conn.prepareCall("{call pro_query_name(?,?)}");
// 设置输入参数
callStmt.setInt(1, 7369);
// 在Java客户端注册返回的数据类型
callStmt.registerOutParameter(2, OracleTypes.VARCHAR);
callStmt.execute();// 执行
// 获得返回的数据
System.out.println(callStmt.getString(2));
} catch (SQLException e) {
e.printStackTrace();
} finally {
free(conn, callStmt, rs);
}
}
/**
* 调用返回结果集的存储过程
*/
public void callRsPro(){
con = new DBConnection();
conn = con.getDBConnection();
try {
callStmt = conn.prepareCall("{call pkg_emp.proc_query_emps(?,?)}");
callStmt.setString(1, "CLERK");
callStmt.registerOutParameter(2, OracleTypes.CURSOR);
callStmt.execute();
rs = (ResultSet)callStmt.getObject(2);
while(rs.next()){
System.out.println("empname: "+rs.getString("ename")+",sal: "+rs.getDouble("sal"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
free(conn, callStmt, rs);
}
}
/**
* 释放资源
*/
public void free(Connection conn, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
更多精彩
赞助商链接