CallableStatement的相关用法解疑

CallableStatement的相关用法解疑

CallableStatement度娘文本解释

CallableStatement 对象为所有的DBMS 提供了一种以标准形式调用已储存过程的方法。

拼代码

     private static Connection conn = null;
     private static CallableStatement Service =null;

    public static Map imports(String url,String user,String password) throws SQLException
     {
        Map map = new HashMap();
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn=DriverManager.getConnection(url, user, password);
            Service = conn.prepareCall("{call fw_abli_export_data_gl(?)}");
            Service.setString(1, srvid);
            Service.execute();
        }  catch (Exception e) {
            e.printStackTrace();
            conn.rollback();
            map.put("e", e);
        }
        finally{
            Service.close();

            conn.close();
        }
        return map;
    }

下面就是对代码进行深入讲解

代码前半段无关乎这次讲解的主题,直接从重点开始说起。
前面说过,CallableStatement就是用标准形式调用已存储过程的。调用的存储过程有两种,一种是不带返回参数的,一种是带返回参数的。
create or replace procedure fw_abli_export_data_gl(srvid in varchar2)as
begin
...
end fw_abli_export_data_gl;     //以上是存储过程的定义

Service = conn.prepareCall("{call fw_abli_export_data_gl(?)}");
Service.setString(1, srvid);
//Service.setInt(..,..)
Service.execute();

//不带返回参数,问号代表占位符,fw_abli_export_data_gl毫无疑问就是过程名
create or replace procedure fw_abli_export_data_gl(srvid out varchar2)as
begin
...
end fw_abli_export_data_gl;     //以上是存储过程的定义

Service = conn.prepareCall("{call fw_abli_export_data_gl(?)}");
Service.registerOutParameter(1, srvid);
Service.execute();
String srvid = Service.getString(1);
//带返回参数的

如果返回的是列表,由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分.
第一部分:建一个程序包

create or replace pakeage mypakeage as
type my_cursor is ref cursor;
end mypackage; 

第二部分,建存储过程:

create or replace procedure fw_abli_export_data_gl(gl_Cursor out mypackage.my_cursor) as
begin
open gl_Cursor for select t.* from base.XXXX t;
end fw_abli_export_data_gl;
//java代码
Service = registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
。。。
ResultSet rs = (ResultSet)Service.getObject(1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值