WEB开发网
开发学院软件开发Java java 调用存储过程进行批处理 阅读

java 调用存储过程进行批处理

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示:先创建两个存储过程下面这个事返回一个值的(指定员工的工资)createorreplaceprocedurepro_query_name(mynoinnumber,mynameoutvarchar2)asbeginselectenameintomynamefromempwhereempno=myno;end;下面这个是返

先创建两个存储过程

下面这个事返回一个值的(指定员工的工资)

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(); 
  } 
 } 
 } 
}

Tags:java 调用 存储

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接