Java调用Oracle存储过程

来源:互联网 发布:fps显示软件 编辑:程序博客网 时间:2024/05/07 23:35
  1. 创建需要的测试表:create table Test(tid varchar2(10),tname varchar2(10));
  2.   第一种情况:无返回值.
  3.       create or replace procedure test_a(param1 in varchar2,param2 in varchar2) as 
  4.        begin
  5.             insert into test value(param1,param2);
  6.      end;
  7.     Java调用代码:
  8. package com.test;
  9. import java.sql.*; 
  10. import java.io.*; 
  11. import java.sql.*; 
  12. public class TestProcA
  13. {
  14.    public TestProcA(){
  15.   
  16.    }
  17.    
  18.    public static void main(String []args)
  19.    {
  20.         
  21.         ResultSet rs = null;
  22.         Connection conn = null
  23.         CallableStatement proc = null
  24.          
  25.         try{
  26.           Class.forName("oracle.jdbc.driver.OracleDriver"); 
  27.           conn =  DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test""test""test"); 
  28.           proc = conn.prepareCall("{ call test_a(?,?) }"); 
  29.           proc.setString(1, "1001"); 
  30.           proc.setString(2, "TestA"); 
  31.           proc.execute(); 
  32.         }catch(Exception e){
  33.      e.printStackTrace();
  34.  }finally{
  35.            try{
  36.        if(null!=rs){
  37.                  rs.close();
  38.           if(null!=proc){
  39.                     proc.close();
  40.           }
  41.           if(null!=conn){
  42.                     conn.close();
  43.           } 
  44.        }  
  45.            }catch(Exception ex){
  46.            }
  47.         }
  48.    }
  49. }
  50. 第二种情况:有返回值的存储过程(返回值非列表).
  51. 存储过程为:
  52. create or replace procedure test_b(param1 in varchar2,param2 out varchar2)
  53. as 
  54.  begin 
  55.     select tname into param2 from test where tid=param1;
  56.  end;
  57. Java调用代码:
  58.  package com.test;
  59. import java.sql.*; 
  60. import java.io.*; 
  61. import java.sql.*; 
  62. public class TestProcB
  63. {
  64.    public TestProcB(){
  65.   
  66.    }
  67.    
  68.    public static void main(String []args)
  69.    {
  70.         
  71.         Connection conn = null
  72.         CallableStatement proc = null
  73.        
  74.         try{
  75.           Class.forName("oracle.jdbc.driver.OracleDriver"); 
  76.           conn =  DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test""test""test"); 
  77.           proc = conn.prepareCall("{ call test_b(?,?) }"); 
  78.           proc.setString(1, "1001"); 
  79.           proc.registerOutParameter(2, Types.VARCHAR);
  80.           proc.execute(); 
  81.    System.out.println("Output is:"+proc.getString(2));
  82.         }catch(Exception e){
  83.      e.printStackTrace();
  84.  }finally{
  85.            try{
  86.           if(null!=proc){
  87.                     proc.close();
  88.           }
  89.           if(null!=conn){
  90.                     conn.close();
  91.           } 
  92.            }catch(Exception ex){
  93.            }
  94.         }
  95.    }
  96. }
  97. 第三种情况:返回列表.
  98. 由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.要分两部分来写:
  99. create or replace package tpackage as
  100. type t_cursor is ref cursor;
  101. procedure test_c(c_ref out t_cursor);
  102. end ;
  103. create or replace package body tpackage as
  104. procedure test_c(c_ref out t_cursor) is
  105.    begin
  106.       open c_ref for select * from test;
  107.   end test_c;
  108. end tpackage;
  109. Java调用代码:
  110. package com.test;
  111. import java.sql.*; 
  112. import java.io.*; 
  113. import java.sql.*; 
  114. public class TestProcB
  115. {
  116.    public TestProcB(){
  117.   
  118.    }
  119.    
  120.    public static void main(String []args)
  121.    {
  122.         
  123.         Connection conn = null
  124.         CallableStatement proc = null
  125.         ResultSet rs =  null;
  126.         try{
  127.           Class.forName("oracle.jdbc.driver.OracleDriver"); 
  128.           conn =  DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test""test""test"); 
  129.           proc = conn.prepareCall("{? = call tpackage.test_b(?) }"); 
  130.            
  131.           proc.registerOutParameter(1,OracleTypes.CURSOR);
  132.           proc.execute(); 
  133.           while(rs.next()){
  134.               System.out.println(rs.getObject(1)+"/t"+rs.getObject(2));
  135.           }
  136.         }catch(Exception e){
  137.      e.printStackTrace();
  138.  }finally{
  139.            try{
  140.           if(null!=rs){
  141.               rs.close();
  142.              if(null!=proc){
  143.                     proc.close();
  144.              }
  145.              if(null!=conn){
  146.                     conn.close();
  147.              } 
  148.           }
  149.           }catch(Exception ex){
  150.            }
  151.         }
  152.    }
  153. }
原创粉丝点击