zoukankan      html  css  js  c++  java
  • Oracle 在JDBC中使用 存储过程,包

     
    前提:
        在Oracle中已经定义  存储过程  和  存储函数 和  包
        导入了Oracle的JDBC   jar  包
     1 package demo;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 import java.sql.Statement;
     8 
     9 public class JDBCUtils {
    10     private static String driver = "oracle.jdbc.OracleDriver";
    11     private static String url = "jdbc:oracle:thin:@192.168.56.101:1521:orcl";
    12     private static String user = "scott";
    13     private static String password = "tiger";
    14     
    15     static{
    16         try {
    17             Class.forName(driver);
    18         } catch (ClassNotFoundException e) {
    19             throw new ExceptionInInitializerError(e);
    20         }
    21         //DriverManager.registerDriver(driver)
    22     }
    23 
    24     public static Connection getConnection(){
    25         try {
    26             return DriverManager.getConnection(url, user, password);
    27         } catch (SQLException e) {
    28             e.printStackTrace();
    29         }
    30         return null;
    31     }
    32 
    33     /*
    34      * 运行Java程序
    35      * java -Xms100M -Xmx200M HelloWorld
    36      * 
    37      * 技术方向:
    38      * 1. 性能调优  ---> tomcat
    39      * 2. 故障诊断  ---> 死锁
    40      */
    41     public static void release(Connection conn,Statement st,ResultSet rs){
    42         if(rs != null){
    43             try {
    44                 rs.close();
    45             } catch (SQLException e) {
    46                 e.printStackTrace();
    47             }finally{
    48                 rs = null;// ----> java GC
    49             }
    50         }
    51         if(st != null){
    52             try {
    53                 st.close();
    54             } catch (SQLException e) {
    55                 e.printStackTrace();
    56             }finally{
    57                 st = null;
    58             }
    59         }
    60         if(conn != null){
    61             try {
    62                 conn.close();
    63             } catch (SQLException e) {
    64                 e.printStackTrace();
    65             }finally{
    66                 conn = null;
    67             }
    68         }
    69     }
    70 }
    Jdbc工具类
      1 package demo;
      2 
      3 import java.sql.CallableStatement;
      4 import java.sql.Connection;
      5 import java.sql.ResultSet;
      6 
      7 import oracle.jdbc.OracleCallableStatement;
      8 import oracle.jdbc.OracleTypes;
      9 
     10 import org.junit.Test;
     11 
     12 public class TestOracle {
     13 /*
     14  * create or replace procedure queryempinfo(eno in number,
     15                                             pename out varchar2,
     16                                             psal   out number,
     17                                             pjob   out varchar2)
     18  */
     19     @Test
     20     public void testProcedure(){
     21         //{call <procedure-name>[(<arg1>,<arg2>, ...)]}
     22         String sql = "{call queryempinfo(?,?,?,?)}";
     23             
     24         Connection conn = null;
     25         CallableStatement call = null;
     26         try {
     27             conn = JDBCUtils.getConnection();
     28             call = conn.prepareCall(sql);
     29             
     30             //对于in参数,赋值
     31             call.setInt(1, 7839);
     32             
     33             //对于out参数,申明
     34             call.registerOutParameter(2, OracleTypes.VARCHAR);
     35             call.registerOutParameter(3, OracleTypes.NUMBER);
     36             call.registerOutParameter(4, OracleTypes.VARCHAR);
     37             
     38             //执行
     39             call.execute();
     40             
     41             //取出结果
     42             String name = call.getString(2);
     43             double sal = call.getDouble(3);
     44             String job = call.getString(4);
     45             System.out.println(name+"	"+sal+"	"+job);
     46         } catch (Exception e) {
     47             e.printStackTrace();
     48         }finally{
     49             JDBCUtils.release(conn, call, null);
     50         }
     51     }
     52 
     53 /*
     54  * create or replace function queryempincome(eno in number)
     55 return number
     56  */
     57     @Test
     58     public void testFunction(){
     59         //{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
     60         String sql = "{?=call queryempincome(?)}";
     61         
     62         Connection conn = null;
     63         CallableStatement call = null;
     64         try {
     65             conn = JDBCUtils.getConnection();
     66             call = conn.prepareCall(sql);
     67             
     68             //第一个是out参数
     69             call.registerOutParameter(1, OracleTypes.NUMBER);
     70             //第二个是in参数
     71             call.setInt(2, 7839);
     72             
     73             call.execute();
     74             
     75             //取出年收入
     76             double income = call.getDouble(1);
     77             System.out.println(income);
     78         } catch (Exception e) {
     79             e.printStackTrace();
     80         }finally{
     81             JDBCUtils.release(conn, call, null);
     82         }        
     83     }
     84 
     85 
     86     @Test
     87     public void testCursor(){
     88         String sql = "{call MYPAKCAGE.queryEmpList(?,?)}";
     89         
     90         Connection conn = null;
     91         CallableStatement call = null;
     92         ResultSet rs = null;
     93         try {
     94             conn = JDBCUtils.getConnection();
     95             call = conn.prepareCall(sql);
     96             
     97             //对于in参数,赋值
     98             call.setInt(1, 20);
     99             //对于out参数  申明
    100             call.registerOutParameter(2, OracleTypes.CURSOR);
    101             
    102             call.execute();
    103             
    104             //取出结果
    105             rs = ((OracleCallableStatement)call).getCursor(2);
    106             while(rs.next()){
    107                 //取出一个员工
    108                 String name = rs.getString("ename");
    109                 double sal = rs.getDouble("sal");
    110                 System.out.println(name+"	"+sal);
    111             }
    112         } catch (Exception e) {
    113             e.printStackTrace();
    114         }finally{
    115             JDBCUtils.release(conn, call, rs);
    116         }
    117     }
    118 }
    测试类
  • 相关阅读:
    使用 Trello 管理自己与团队的工作
    Google译者工具包
    curl的速度为什么比file_get_contents快以及具体原因
    Mac使用秘钥登录Linux服务器
    curl抓取页面时遇到重定向的解决方法
    PHP cURL 超时设置 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的区别
    max函数比较字符串类型
    Dictionary 泛型类
    .NET Framework 概念概述
    认知Web服务器
  • 原文地址:https://www.cnblogs.com/soficircle/p/7276893.html
Copyright © 2011-2022 走看看