一 引言:
学习了怎么创建和使用存储过程和存储函数之后呢,我们来学习如何在Java环境下来访问Oracle的存储过程和存储函数了。
在访问之前首先要导入oracle的驱动,导入的驱动在安装的oracle路径下的此目录下找:oracle\product\10.2.0\db_1\jdbc\lib\ojbc14.jar,好,这样,我们就有了oracle驱动,来建一个java类来测试吧!
二 练练吧 -- 存储过程的调用!
1. 首先要先载入驱动来和oracle数据库连接:
private static Connection conn; static { try { // 第一步:加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); // 得到连接对象 test1是用户的名字 conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:orcl", "test1", "test1"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }2.我们来调用第一种存储过程,存储过程的内容为:
create or replace procedure selectEmp(emp_no in number, ename out varchar2,job out varchar2 ,sal out number) is begin select ename,job,sal into ename,job,sal from emp where empno=emp_no; end selectEmp; 在java中调用上面的存储过程,代码为: public static void testprocedure() { try { // 创建callabStatement对象来调用存储过程 通过占位符传递的是int和out的参数, CallableStatement cas = conn .prepareCall("{call selectEmp(?,?,?,?)}"); // 从1开始 int index = 1; // 为占位符赋值 输入参数赋值 cas.setInt(index++, 7369); // 为输出参数赋值 cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR); cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR); cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER); // 执行操作 返回的不是ResultSet 如果返回的是ResultSet 则为true,返回的是空则为false boolean flag = cas.execute(); System.out.println(flag); // 判断 if (!flag) { // 获取值 String ename = cas.getString(2); String job = cas.getString(3); int sal = cas.getInt(4); System.out.println(ename); System.out.println(job); System.out.println(sal); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }