首先一定要连接数据库啊
private static Connection conn;
static{
//第一步:加载驱动
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到连接对象 conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","scott");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
实例一:
【
create or replace procedure selectEmp(emp_no in number,ename out varchar2,job out varchar2,sal out number,deptno out number) is
begin
select ename,job,sal,deptno into ename,job,sal,deptno from emp where empno=emp_no;
end selectEmp;
】
//调用存储过程
public static void procedure() throws SQLException{
//创建CallableStatement 参数in 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);
cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);
//根据传递的参数值执行操作 如果第一个结果是 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);
int deptno=cas.getInt(5);
System.out.println(ename);
System.out.println(job);
System.out.println(sal);
System.out.println(deptno);
}
}
实例二:
【
通过包声明一个存储过程
create or replace package emppackage is
type empcursor is ref cursor;
procedure selectEmps(emplist out empcursor);
end emppackage;
包体:
create or replace package body emppackage is
procedure selectEmps(emplist out empcursor) is
begin
open emplist for select * from emp;
end;
end emppackage;
】
public static void testProcedure() throws SQLException{
//创建CallableStatement 参数in out 通过占位符传值
CallableStatement cas=conn.prepareCall("{call emppackage.selectEmps(?)}");
//从1开始
int index = 1;
//为占位符赋值
cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.CURSOR);
//根据传递的参数值执行操作 返回false代表里面什么也没有,返回true代表返回的是ResultSet结果集
boolean flag=cas.execute();
System.out.println(flag);
//OracleCallableStatement强制造型为oracle中的存储过程的对象
//调用里边的getCursor方法 返回的是ResultSet结果集
ResultSet rs = ((OracleCallableStatement)cas).getCursor(1);
while(rs.next()){
System.out.println(rs.getInt(1));
}
}
在java语言中调用存储过程
最新推荐文章于 2022-01-17 20:01:19 发布