zoukankan      html  css  js  c++  java
  • java下实现调用oracle的存储过程和函数

     
     

    在oracle下创建一个test的账户,然后

    1.创建表:STOCK_PRICES

    [cpp] view plaincopy
     
    1. --创建表格  
    2. CREATE TABLE STOCK_PRICES(  
    3.     RIC VARCHAR(6) PRIMARY KEY,  
    4.     PRICE NUMBER(7,2),  
    5.     UPDATED DATE );  

    2.插入测试数据:

    [sql] view plaincopy
     
    1. --插入数据  
    2. INSERT INTO stock_prices values('1111',1.0,SYSDATE);  
    3. INSERT INTO stock_prices values('1112',2.0,SYSDATE);  
    4. INSERT INTO stock_prices values('1113',3.0,SYSDATE);  
    5. INSERT INTO stock_prices values('1114',4.0,SYSDATE);  

    3.建立一个返回游标: 

    PKG_PUB_UTILS

    [cpp] view plaincopy
     
    1. --建立一个返回游标  
    2. CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS  
    3.     --动态游标  
    4.     TYPE REFCURSOR IS REF CURSOR;  
    5. END PKG_PUB_UTILS;  

    4.创建和存储过程:P_GET_PRICE

    [sql] view plaincopy
     
    1. --创建存储过程  
    2. CREATE OR REPLACE PROCEDURE P_GET_PRICE  
    3. (  
    4.   AN_O_RET_CODE OUT NUMBER,  
    5.   AC_O_RET_MSG  OUT VARCHAR2,  
    6.   CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,  
    7.   AN_I_PRICE IN NUMBER  
    8. )   
    9. IS  
    10. BEGIN  
    11.     AN_O_RET_CODE := 0;  
    12.     AC_O_RET_MSG  := '操作成功';  
    13.       
    14.     OPEN CUR_RET FOR  
    15.         SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;  
    16. EXCEPTION  
    17.     WHEN OTHERS THEN  
    18.         AN_O_RET_CODE := -1;  
    19.         AC_O_RET_MSG  := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;  
    20. END P_GET_PRICE;  

    5.创建函数:

    [cpp] view plaincopy
     
    1. --创建函数:F_GET_PRICE  
    2. CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)  
    3.     RETURN PKG_PUB_UTILS.REFCURSOR  
    4. AS  
    5.     stock_cursor PKG_PUB_UTILS.REFCURSOR;  
    6. BEGIN  
    7.     OPEN stock_cursor FOR  
    8.     SELECT * FROM stock_prices WHERE price < v_price;  
    9.     RETURN stock_cursor;  
    10. END;  

    6.JAVA调用存储过程返回结果集

    JDBCoracle10G_INVOKEPROCEDURE.java

    [java] view plaincopy
     
    1. import java.sql.*;  
    2. import oracle.jdbc.OracleCallableStatement;  
    3. import oracle.jdbc.OracleTypes;  
    4.   
    5. /* 本例是通过调用oracle的存储过程来返回结果集: 
    6.  * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip 
    7.  */  
    8. public class JDBCoracle10G_INVOKEPROCEDURE {  
    9.     Connection conn = null;  
    10.     Statement statement = null;  
    11.     ResultSet rs = null;  
    12.     CallableStatement stmt = null;  
    13.   
    14.     String driver;  
    15.     String url;  
    16.     String user;  
    17.     String pwd;  
    18.     String sql;  
    19.     String in_price;  
    20.   
    21.     public JDBCoracle10G_INVOKEPROCEDURE()   
    22.     {  
    23.         driver = "oracle.jdbc.driver.OracleDriver";  
    24.         url = "jdbc:oracle:thin:@localhost:1521:ORCL";  
    25.         // oracle 用户  
    26.         user = "test";  
    27.         // oracle 密码  
    28.         pwd = "test";  
    29.         init();  
    30.         // mysid:必须为要连接机器的sid名称,否则会包以下错:  
    31.         // java.sql.SQLException: Io 异常: Connection  
    32.         // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))  
    33.         // 参考连接方式:  
    34.         // Class.forName( "oracle.jdbc.driver.OracleDriver" );  
    35.         // cn = DriverManager.getConnection(  
    36.         // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );  
    37.   
    38.     }  
    39.   
    40.     public void init() {  
    41.         System.out.println("oracle jdbc test");  
    42.         try {  
    43.             Class.forName(driver);  
    44.             System.out.println("driver is ok");  
    45.             conn = DriverManager.getConnection(url, user, pwd);  
    46.             System.out.println("conection is ok");  
    47.             statement = conn.createStatement();  
    48.             // conn.setAutoCommit(false);  
    49.             // 输入参数  
    50.             in_price = "3.0";  
    51.             // 调用函数  
    52.             stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)");  
    53.             stmt.registerOutParameter(1, java.sql.Types.FLOAT);  
    54.             stmt.registerOutParameter(2, java.sql.Types.CHAR);  
    55.             stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);  
    56.             stmt.setString(4, in_price);  
    57.             stmt.executeUpdate();  
    58.             int retCode = stmt.getInt(1);  
    59.             String retMsg = stmt.getString(2);  
    60.             if (retCode == -1) { // 如果出错时,返回错误信息  
    61.                 System.out.println("报错!");  
    62.             } else {  
    63.                 // 取的结果集的方式一:  
    64.                 rs = ((OracleCallableStatement) stmt).getCursor(3);  
    65.                 // 取的结果集的方式二:  
    66.                 // rs = (ResultSet) stmt.getObject(3);  
    67.                 String ric;  
    68.                 String price;  
    69.                 String updated;  
    70.                 // 对结果进行输出  
    71.                 while (rs.next()) {  
    72.                     ric = rs.getString(1);  
    73.                     price = rs.getString(2);  
    74.                     updated = rs.getString(3);  
    75.                     System.out.println("ric:" + ric + ";-- price:" + price  
    76.                             + "; --" + updated + "; ");  
    77.                 }  
    78.             }  
    79.   
    80.         } catch (Exception e) {  
    81.             e.printStackTrace();  
    82.         } finally {  
    83.             System.out.println("close ");  
    84.         }  
    85.     }  
    86.   
    87.     public static void main(String args[])// 自己替换[]  
    88.     {  
    89.         new JDBCoracle10G_INVOKEPROCEDURE();  
    90.     }  
    91. }  

    7.开发JAVA调用函数返回结果集

    JDBCoracle10G_INVOKEFUNCTION.java

    [java] view plaincopy
     
    1. import java.sql.*;  
    2. import oracle.jdbc.OracleCallableStatement;  
    3. import oracle.jdbc.OracleTypes;  
    4.   
    5. /* 
    6.  /* 本例是通过调用oracle的函数来返回结果集: 
    7.  * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip   
    8.  */  
    9. public class JDBCoracle10G_INVOKEFUNCTION {  
    10.     Connection conn = null;  
    11.     Statement statement = null;  
    12.     ResultSet rs = null;  
    13.     CallableStatement stmt = null;  
    14.   
    15.     String driver;  
    16.     String url;  
    17.     String user;  
    18.     String pwd;  
    19.     String sql;  
    20.     String in_price;  
    21.   
    22.     public JDBCoracle10G_INVOKEFUNCTION()  
    23.     {  
    24.         driver = "oracle.jdbc.driver.OracleDriver";  
    25.         url = "jdbc:oracle:thin:@localhost:1521:ORCL";  
    26.         // oracle 用户  
    27.         user = "test";  
    28.         // oracle 密码  
    29.         pwd = "test";  
    30.         init();  
    31.         // mysid:必须为要连接机器的sid名称,否则会包以下错:  
    32.         // java.sql.SQLException: Io 异常: Connection  
    33.         // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))  
    34.         // 参考连接方式:  
    35.         // Class.forName( "oracle.jdbc.driver.OracleDriver" );  
    36.         // cn = DriverManager.getConnection(  
    37.         // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );  
    38.     }  
    39.   
    40.     public void init() {  
    41.         System.out.println("oracle jdbc test");  
    42.         try {  
    43.             Class.forName(driver);  
    44.             System.out.println("driver is ok");  
    45.             conn = DriverManager.getConnection(url, user, pwd);  
    46.             System.out.println("conection is ok");  
    47.             statement = conn.createStatement();  
    48.             // conn.setAutoCommit(false);  
    49.             // 输入参数  
    50.             in_price = "5.0";  
    51.             // 调用函数  
    52.             stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");  
    53.             // stmt.registerOutParameter(1, java.sql.Types.FLOAT);  
    54.             // stmt.registerOutParameter(2, java.sql.Types.CHAR);  
    55.             stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);  
    56.             stmt.setString(2, in_price);  
    57.             stmt.executeUpdate();  
    58.             // 取的结果集的方式一:  
    59.             rs = ((OracleCallableStatement) stmt).getCursor(1);  
    60.             // 取的结果集的方式二:  
    61.             // rs = (ResultSet) stmt.getObject(1);  
    62.             String ric;  
    63.             String price;  
    64.             String updated;  
    65.   
    66.             while (rs.next()) {  
    67.                 ric = rs.getString(1);  
    68.                 price = rs.getString(2);  
    69.                 updated = rs.getString(3);  
    70.                 System.out.println("ric:" + ric + ";-- price:" + price + "; --"  
    71.                         + updated + "; ");  
    72.             }  
    73.   
    74.         } catch (Exception e) {  
    75.             e.printStackTrace();  
    76.         } finally {  
    77.             System.out.println("close ");  
    78.         }  
    79.     }  
    80.   
    81.     public static void main(String args[])// 自己替换[]  
    82.     {  
    83.         new JDBCoracle10G_INVOKEFUNCTION();  
    84.     }  
    85. }  
  • 相关阅读:
    prtg
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯显示二叉树
    java实现第六届蓝桥杯显示二叉树
    java实现第六届蓝桥杯显示二叉树
    java实现第六届蓝桥杯显示二叉树
  • 原文地址:https://www.cnblogs.com/moonfans/p/3942099.html
Copyright © 2011-2022 走看看