【存储过程】 在java语言中调用存储过程

9 篇文章 0 订阅
4 篇文章 0 订阅
首先一定要连接数据库啊  
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));  
        }  
    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值