Java如何实现调用oracle带有返回值的存储过程

实现目标:在proTest表中查询出id=1的用户姓名

表代码块

create table protest(
    id int primary key,
    name varchar2(50),
    email varchar2(200)
)

insert into protest values(1,'random','');

存储过程代码块

--参数列表  in 代表输入  out 代表输出  后面则是参数类型
create or replace procedure proc_select_protest_byid(in_id in int,out_name out varchar2)
is
begin
select name into out_name from protest where id=in_id;
end;

Java测试代码块

import 包省略

public class Test{

    @Test
    public void proTest(){
        Connection conn = null;  
        CallableStatement cs = null;  
        try {  
            Class.forName("oracle.jdbc.driver.OracleDriver");  
            conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "a");  
            cs = conn.prepareCall("{call proc_select_protest_byid(?,?)}");  
            //设置存储过程的输入参数  
            cs.setInt(1, 1);  
            //设置存储过程的输出参数的处理方式 
            cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);  
            cs.execute();  
            //获取存储过程的返回值  
            String name = cs.getString(2);  
            System.out.println(name);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }finally{  
            try {  
                cs.close();  
                conn.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }
}

console

random



注意事项
1.对于存储过程的输入参数,使用setXXX;对于输出参数,使用registerOutParameter,问号的顺序要对应,同时需要考虑类型。
2.取出存储过程返回值的方法是CallableStatement提供的getXX()注意输出参数的位置,同时也需要考虑输出参数的类型。



参考资料

        java调用oracle带有返回值的存储过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值