一、环境准备
登录Oracle数据库scott账号,利用emp进行操作。
1、创建 proc_getyearsal 存储过程
1 -- 获取指定员工年薪 2 create or replace procedure proc_getyearsal(vempno in number,vyearsal out number) 3 is 4 5 begin 6 select sal*12+nvl(comm,0) into vyearsal from emp where empno=vempno; 7 end;
2、创建 proc_gettemps 存储过程(游标)
1 create or replace procedure proc_gettemps(vemps out sys_refcursor) 2 is 3 BEGIN 4 open vemps for select * from emp where deptno = 20; 5 end;
3、导入数据库驱动包 —— ojdbc14.jar
二、java代码示例
1 package com.pri.test; 2 3 public class TestProcedure { 4 5 /* 6 java调用存储过程模板(一) 7 获取单值操作 8 */ 9 @Test 10 public void test01() throws Exception { 11 //1.注册驱动 12 Class.forName("oracle.jdbc.driver.OracleDriver"); 13 //2.获取连接 14 String url = "jdbc:oracle:thin:@10.211.55.29:1521/orcl"; 15 String user = "zhangsan"; 16 String password = "zs123"; 17 Connection conn = DriverManager.getConnection(url, user, password); 18 //3.获取执行SQL的对象 19 String sql = "{call proc_getyearsal(?,?)}"; 20 CallableStatement callableStatement = conn.prepareCall(sql); 21 //3.1 设置输出参数 22 callableStatement.setInt(1,7369); 23 //3.2 注册输出类型 24 callableStatement.registerOutParameter(2, Types.DOUBLE); 25 //4.执行SQL 26 callableStatement.execute(); 27 //5.执行结果 28 double yearsal = callableStatement.getDouble(2); 29 System.out.println("年薪:"+yearsal); 30 //6.释放资源 31 callableStatement.close(); 32 conn.close(); 33 } 34 35 /* 36 java调用存储过程模板(二) 37 多行记录(游标)操作 38 */ 39 @Test 40 public void test03() throws Exception { 41 //1.注册驱动 42 Class.forName("oracle.jdbc.driver.OracleDriver"); 43 //2.获取连接 44 String url = "jdbc:oracle:thin:@10.211.55.29:1521/orcl"; 45 String user = "zhangsan"; 46 String password = "zs123"; 47 Connection conn = DriverManager.getConnection(url, user, password); 48 //3.获取执行SQL的对象 49 String sql = "{call proc_gettemps(?)}"; 50 CallableStatement callableStatement = conn.prepareCall(sql); 51 //3.1 注册输出类型 52 callableStatement.registerOutParameter(1, OracleTypes.CURSOR); 53 //4.执行SQL 54 callableStatement.execute(); 55 //5.获取结果 56 System.out.println(callableStatement.getClass().getName()); 57 // T4CCallableStatent call2 = () callableStatement; 58 OracleCallableStatement call2 = (OracleCallableStatement) callableStatement; 59 ResultSet rs = call2.getCursor(1); 60 61 while(rs.next()){ 62 System.out.println(rs.getObject("empno")); 63 System.out.println(rs.getObject("ename")); 64 System.out.println(rs.getObject("sal")); 65 System.out.println("------------------------"); 66 } 67 //6.释放资源 68 rs.close(); 69 callableStatement.close(); 70 conn.close(); 71 } 72 73 }