JDBC可以调用数据库提供的存储过程/函数

存储过程: 
Java代码   收藏代码
  1. create or replace procedure inandoutpro(a in out number,b in out number) as  
  2. begin  
  3.        a:=a+b;  
  4.        b:=a-b;  
  5.        a:=a-b;  
  6. end inandoutpro;  

java类调用存储过程: 
Java代码   收藏代码
  1. Class.forName("oracle.jdbc.driver.OracleDriver");  
  2.         Connection conn = DriverManager.getConnection(  
  3.                 "jdbc:oracle:thin:@localhost:1521:orcl""scott""ronaldo");  
  4.         String procedure = "{call inandoutpro(?,?)}";  
  5.         CallableStatement cs = conn.prepareCall(procedure);  
  6.         cs.setInt(15);  
  7.         cs.setInt(27);  
  8.         cs.registerOutParameter(1, java.sql.Types.INTEGER);  
  9.         cs.registerOutParameter(2, java.sql.Types.INTEGER);  
  10.   
  11.         cs.executeUpdate();  
  12.   
  13.         int a = cs.getInt(1);  
  14.         int b = cs.getInt(2);  
  15.         System.out.println(a + "==" + b);  


函数(行转列): 
Java代码   收藏代码
  1. create or replace function rowToCol(QuerySql varchar2) return varchar2 as  
  2. begin  
  3.      declare type cu_rtoc is ref cursor;  
  4.      proscu cu_rtoc;  
  5.      string_name varchar2(200);  
  6.      row_cu product%rowtype;  
  7.      begin  
  8.           open proscu for QuerySql;  
  9.           loop  
  10.               fetch proscu into row_cu;  
  11.               exit when proscu%notfound;  
  12.               string_name:=string_name||row_cu.pname||',';  
  13.           end loop;  
  14.           return rtrim(string_name,',');--去掉最后的逗号  
  15.      end;  
  16. end rowToCol;  


java类调用函数: 
Java代码   收藏代码
  1. Class.forName("oracle.jdbc.driver.OracleDriver");  
  2.         Connection conn = DriverManager.getConnection(  
  3.                 "jdbc:oracle:thin:@localhost:1521:orcl""scott""ronaldo");  
  4.         String procedure = "{?=call rowToCol(?)}";  
  5.         CallableStatement cs = conn.prepareCall(procedure);  
  6.         cs.registerOutParameter(1, Types.VARCHAR);// 获得返回的字符串  
  7.         String sql = "select * from product";  
  8.         cs.setString(2, sql);  
  9.         cs.executeUpdate();  
  10.         String names = cs.getString(1);  
  11.         System.out.println(names);  
  12.         conn.close();  


包(游标): 
Java代码   收藏代码
  1. --package包(接口)  
  2. create or replace package pro_package as  
  3.        type cu_ref is ref cursor;  
  4.        procedure pro_product(cur_ref out cu_ref);  
  5. end pro_package;  
  6.   
  7. --实现包(实现类)  
  8. create or replace package body pro_package as  
  9.       procedure pro_product(cur_ref out cu_ref) is  
  10.       begin  
  11.            open cur_ref for 'select * from product';  
  12.       end pro_product;  
  13. end pro_package;  


java类调用包里的过程返回游标: 
Java代码   收藏代码
  1. Class.forName("oracle.jdbc.driver.OracleDriver");  
  2.         Connection conn = DriverManager.getConnection(  
  3.                 "jdbc:oracle:thin:@localhost:1521:orcl""scott""ronaldo");  
  4.         String callsql = "{call pro_package.pro_product(?)}";  
  5.         OracleCallableStatement cs = (OracleCallableStatement) conn  
  6.                 .prepareCall(callsql);  
  7.         cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);  
  8.         cs.executeUpdate();  
  9.         ResultSet rs = null;  
  10.         rs = cs.getCursor(1);  
  11.         while (rs.next()) {  
  12.             System.out.println(rs.getString(1) + "==" + rs.getString(2) + "=="  
  13.                     + rs.getString(3));  
  14.         }  
  15.         rs.close();  
  16.         conn.close();  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值