在java中调用存储过程

5 篇文章 0 订阅
1 篇文章 0 订阅
在java中调用存储过程:
一、只返回一个数值
1.存储过程
create or replace procedure getCount(a in number,
                                     b in number,
                                     c out number) is
  sql_str varchar2(100);
begin
  sql_str := 'select ' || a || '+' || b || 'into: c from dual';
  execute immediate sql_str
    into c;
  dbms_output.put_line(sql_str);
end getCount;


2.java中取值
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:lubby";
Connection conn = DriverManager.getConnection(url, "admin", "admin");
CallableStatement cs = conn.prepareCall("{call GETCOUNT(?,?,?)}");
cs.setFloat(1, 33);
cs.setFloat(2,33);
cs.registerOutParameter(3, oracle.jdbc.OracleTypes.FLOAT);
cs.execute();


System.out.println(cs.getInt(3));
二、返回结果集的


1.存储过程:
create or replace procedure getinfo(param_row  in number,
                                    param_size in number,
                                    out_count  out number,
                                    out_list   out sys_refcursor) is
  sql_str       varchar2(250);
  sql_count_str varchar2(250);
begin
  --求总数
  sql_count_str := 'select count(*) from info ';
  --求结果集
  if param_row is not null and param_size is not null then
    sql_str := 'select rownum rn,t1.* from info t1 where 1=1 and rownum <=' ||
               param_row * param_size;
    sql_str := 'select * from (' || sql_str || ') t2 where 1=1 and t2.rn >' ||
               (param_row - 1) * param_size;
  end if;
  --输出查询语句
  dbms_output.put_line(sql_str);
  dbms_output.put_line(sql_count_str);
  --返回结果集和总数
  execute immediate sql_count_str
    into out_count;
  open out_list for sql_str;
end getinfo;


2.java中取结果集


public static void main(String[] args) throws ClassNotFoundException,
SQLException {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:lubby";
Connection conn = DriverManager.getConnection(url, "admin", "admin");
CallableStatement procedure = conn.prepareCall("{call getinfo(?,?,?,?)}");
procedure.setInt(1, 1);
procedure.setInt(2, 10);
procedure.registerOutParameter(3, OracleTypes.FLOAT);
procedure.registerOutParameter(4, OracleTypes.CURSOR);
procedure.execute();
Integer count = 0;
count = procedure.getInt(3);
System.out.println("count is " + count);
ResultSet rs = (ResultSet) procedure.getObject(4);
while(rs.next()){
System.out.println("id:" + rs.getInt(1));
System.out.println("bussiness:" + rs.getString(2));
System.out.println("customer:" + rs.getString(3));
System.out.println("brand:" + rs.getString(4));
}


}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值