做一個,記一篇 — Java調用Oracle預存程序

來源:互聯網
上載者:User

標籤:jdb   url   varchar   ring   final   catch   result   create   except   

一、需求

        傳入一個參數,返回多條記錄(列表)。

 

二、實現步驟

  1. 編寫Oracle預存程序。

-- 聲明包和包體的語句應該分兩次執行,即使聲明在前定義在後,如果一起執行依然會編譯出錯-- 調用能夠返回多條記錄的預存程序需要定義在包內--聲明包及包內的遊標、預存程序CREATE OR REPLACE PACKAGE pack_myPackage IS    TYPE myCursor IS REF CURSOR;    PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, myCursor OUT myCursor);END myPackage;--定義包體CREATE OR REPLACE PACKAGE BODY pack_myPackage ISPROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, outcursor OUT myCursor) ISBEGIN    OPEN outcursor FOR        SELECT * FROM tableA WHERE P_NO = pNo;END proc_querySomeInfo;END pack_myPackage;

  2. 編寫Java代碼

package vip.yaocn.test;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;/** * 預存程序測試 * * @author yacon */public class ProcedureTest {    public static void main(String[] args) throws Exception {        String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";        String driverName = "oracle.jdbc.driver.OracleDriver";        String username = "scott";        String password = "tiger";        Connection conn = null;        CallableStatement cstmt = null;        ResultSet rs = null;        try {            Class.forName(driverName);            conn = DriverManager.getConnection(url, username, password);            String callSql = "{call pack_myPackage.proc_getSomeInfo(?, ?) }";            cstmt = conn.prepareCall(callSql);            cstmt.setString(1, "1001");            cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);            cstmt.execute();            rs = (ResultSet) cstmt.getObject(2);            if (rs != null) {                while (rs.next()) {                    System.out.println(rs.getString(1));                }            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (rs != null) {                    rs.close();                }            } catch (Exception e) {                e.printStackTrace();            }            try {                if (cstmt != null) {                    cstmt.close();                }            } catch (Exception e) {                e.printStackTrace();            }            try {                if (conn != null) {                    conn.close();                }            } catch (Exception e) {                e.printStackTrace();            }        }    }}

  3. 拓展知識

  (1)

做一個,記一篇 — 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.