java下實現調用oracle的預存程序和函數

來源:互聯網
上載者:User

標籤:

在oracle下建立一個test的賬戶,然後按一下步驟執行:

1.建立表:STOCK_PRICES
--建立表格CREATE TABLE STOCK_PRICES(    RIC VARCHAR(6) PRIMARY KEY,    PRICE NUMBER(7,2),    UPDATED DATE );
2.插入測試資料:
--插入資料INSERT INTO stock_prices values(‘1111‘,1.0,SYSDATE);INSERT INTO stock_prices values(‘1112‘,2.0,SYSDATE);INSERT INTO stock_prices values(‘1113‘,3.0,SYSDATE);INSERT INTO stock_prices values(‘1114‘,4.0,SYSDATE);
3.建立一個返回遊標: PKG_PUB_UTILS
--建立一個返回遊標CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS    --動態資料指標    TYPE REFCURSOR IS REF CURSOR;END PKG_PUB_UTILS;
4.建立和預存程序:P_GET_PRICE
--建立預存程序CREATE OR REPLACE PROCEDURE P_GET_PRICE (  AN_O_RET_CODE OUT NUMBER,  AC_O_RET_MSG  OUT VARCHAR2,  CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,  AN_I_PRICE IN NUMBER) ISBEGIN    AN_O_RET_CODE := 0;    AC_O_RET_MSG  := ‘操作成功‘;        OPEN CUR_RET FOR        SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;EXCEPTION        WHEN OTHERS THEN        AN_O_RET_CODE := -1;        AC_O_RET_MSG  := ‘錯誤碼:‘ || SQLCODE || CHR(13) || ‘錯誤資訊:‘ || SQLERRM;END P_GET_PRICE;
5.建立函數:
--建立函數:F_GET_PRICECREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)        RETURN PKG_PUB_UTILS.REFCURSORAS    stock_cursor PKG_PUB_UTILS.REFCURSOR;BEGIN    OPEN stock_cursor FOR    SELECT * FROM stock_prices WHERE price < v_price;        RETURN stock_cursor;END;
6.JAVA調用預存程序返回結果集

程式碼範例:JDBCoracle10G_INVOKEPROCEDURE.java

import java.sql.*;import oracle.jdbc.OracleCallableStatement;import oracle.jdbc.OracleTypes;/* 本例是通過調用oracle的預存程序來返回結果集: * oracle 9i、10G 的jdbc由1個jar包組成:classes12.zip  */ public class JDBCoracle10G_INVOKEPROCEDURE {    Connection conn = null;    Statement statement = null;    ResultSet rs = null;    CallableStatement stmt = null;    String driver;    String url;    String user;    String pwd;    String sql;    String in_price;    public JDBCoracle10G_INVOKEPROCEDURE()     {        driver = "oracle.jdbc.driver.OracleDriver";        url = "jdbc:oracle:thin:@localhost:1521:ORCL";        // oracle 使用者        user = "test";        // oracle 密碼        pwd = "test";        init();        // mysid:必須為要串連機器的sid名稱,否則會包以下錯:        // java.sql.SQLException: Io 異常: Connection        // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))        // 參考串連方式:        // Class.forName( "oracle.jdbc.driver.OracleDriver" );        // cn = DriverManager.getConnection(        // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );    }    public void init() {        System.out.println("oracle jdbc test");        try {            Class.forName(driver);            System.out.println("driver is ok");            conn = DriverManager.getConnection(url, user, pwd);            System.out.println("conection is ok");            statement = conn.createStatement();            // conn.setAutoCommit(false);            // 輸入參數            in_price = "3.0";            // 調用函數            stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)");            stmt.registerOutParameter(1, java.sql.Types.FLOAT);            stmt.registerOutParameter(2, java.sql.Types.CHAR);            stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);            stmt.setString(4, in_price);            stmt.executeUpdate();            int retCode = stmt.getInt(1);            String retMsg = stmt.getString(2);            if (retCode == -1) { // 如果出錯時,返回錯誤資訊                System.out.println("報錯!");            } else {                // 取的結果集的方式一:                rs = ((OracleCallableStatement) stmt).getCursor(3);                // 取的結果集的方式二:                // rs = (ResultSet) stmt.getObject(3);                String ric;                String price;                String updated;                // 對結果進行輸出                while (rs.next()) {                    ric = rs.getString(1);                    price = rs.getString(2);                    updated = rs.getString(3);                    System.out.println("ric:" + ric + ";-- price:" + price                            + "; --" + updated + "; ");                }            }        } catch (Exception e) {            e.printStackTrace();        } finally {            System.out.println("close ");        }    }    public static void main(String args[])// 自己替換[]    {        new JDBCoracle10G_INVOKEPROCEDURE();    }}
7.開發JAVA調用函數返回結果集

程式碼範例:JDBCoracle10G_INVOKEFUNCTION.java

import java.sql.*;import oracle.jdbc.OracleCallableStatement;import oracle.jdbc.OracleTypes;/* * 本例是通過調用oracle的函數來返回結果集: * oracle 9i、10G 的jdbc由1個jar包組成:classes12.zip   */ public class JDBCoracle10G_INVOKEFUNCTION {    Connection conn = null;    Statement statement = null;    ResultSet rs = null;    CallableStatement stmt = null;    String driver;    String url;    String user;    String pwd;    String sql;    String in_price;    public JDBCoracle10G_INVOKEFUNCTION()    {        driver = "oracle.jdbc.driver.OracleDriver";        url = "jdbc:oracle:thin:@localhost:1521:ORCL";        // oracle 使用者        user = "test";        // oracle 密碼        pwd = "test";        init();        // mysid:必須為要串連機器的sid名稱,否則會包以下錯:        // java.sql.SQLException: Io 異常: Connection        // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))        // 參考串連方式:        // Class.forName( "oracle.jdbc.driver.OracleDriver" );        // cn = DriverManager.getConnection(        // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );    }    public void init() {        System.out.println("oracle jdbc test");        try {            Class.forName(driver);            System.out.println("driver is ok");            conn = DriverManager.getConnection(url, user, pwd);            System.out.println("conection is ok");            statement = conn.createStatement();            // conn.setAutoCommit(false);            // 輸入參數            in_price = "5.0";            // 調用函數            stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");            // stmt.registerOutParameter(1, java.sql.Types.FLOAT);            // stmt.registerOutParameter(2, java.sql.Types.CHAR);            stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);            stmt.setString(2, in_price);            stmt.executeUpdate();            // 取的結果集的方式一:            rs = ((OracleCallableStatement) stmt).getCursor(1);            // 取的結果集的方式二:            // rs = (ResultSet) stmt.getObject(1);            String ric;            String price;            String updated;            while (rs.next()) {                ric = rs.getString(1);                price = rs.getString(2);                updated = rs.getString(3);                System.out.println("ric:" + ric + ";-- price:" + price + "; --"                        + updated + "; ");            }        } catch (Exception e) {            e.printStackTrace();        } finally {            System.out.println("close ");        }    }    public static void main(String args[])// 自己替換[]    {        new JDBCoracle10G_INVOKEFUNCTION();    }}


java下實現調用oracle的預存程序和函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.