<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java調用存儲過程

    Posted on 2008-01-26 16:00 flustar 閱讀(297) 評論(0)  編輯  收藏 所屬分類: Java

     

    一:無返回值的存儲過程

    存儲過程為:

    create or replace procedure adddept(deptno number,dname varchar2,loc varchar2)

     as

    begin

     insert into dept values(deptno,dname,loc);

     end;

    然后呢,在java里調用時就用下面的代碼:

    public class TestProcedure {

    Connection conn=null ;

    CallableStatement cstmt=null ;

     PreparedStatement pstmt=null ;

    String url="jdbc:oracle:thin:@localhost:1521:mydb";

    String driver="oracle.jdbc.driver.OracleDriver";

    String name="";

     public TestProcedure() {

     try {

     Class.forName(driver);

     conn=DriverManager.getConnection(url,"scott","tiger");

    cstmt=conn.prepareCall("{call adddept(?,?,?)}");

    cstmt.setInt(1,13);

     cstmt.setString(2,"間諜部2");

    cstmt.setString(3,"ningbo2");

    cstmt.executeUpdate();

     

     System.out.println("success");

     }

     catch (Exception e){e.printStackTrace();}

    finally{

    cstmt.close();

    conn.close();

     }

     }

    }

    dept表為oracle數據庫方案scott中的一個表

    二:有返回值的存儲過程(非列表)

    存儲過程為:

    CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS

    BEGIN

    SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;

    END TESTB;

    java里調用時就用下面的代碼:

    package com.hyq.src;

    public class TestProcedureTWO {

    public TestProcedureTWO() {

    }

    public static void main(String[] args ){

    String driver = "oracle.jdbc.driver.OracleDriver";

    String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

    Statement stmt = null;

    ResultSet rs = null;

    Connection conn = null;

    try {

    Class.forName(driver);

    conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");

    CallableStatement proc = null;

    proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");

    proc.setString(1, "100");

    proc.registerOutParameter(2, Types.VARCHAR);

    proc.execute();

    String testPrint = proc.getString(2);

    System.out.println("=testPrint=is="+testPrint);

    }

    catch (SQLException ex2) {

    ex2.printStackTrace();

    }

    catch (Exception ex2) {

    ex2.printStackTrace();

    }

    finally{

    try {

    if(rs != null){

    rs.close();

    if(stmt!=null){

    stmt.close();

    }

    if(conn!=null){

    conn.close();

    }

    }

    }

    catch (SQLException ex1) {

    }

    }

    }

    }

    }

    注意,這里的proc.getString(2)中的數值2并非任意的,而是和存儲過程中的out列對應的,如果out是在第一個位置,那就是proc.getString(1),如果是第三個位置,就是proc.getString(3),當然也可以同時有多個返回值,那就是再多加幾個out參數了。

    三:返回列表

    由于oracle存儲過程沒有返回值,它的所有返回值都是通過out參數來替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數,必須要用pagkage.所以要分兩部分,

    1, 建一個程序包。如下:

    CREATE OR REPLACE PACKAGE TESTPACKAGE AS

    TYPE Test_CURSOR IS REF CURSOR;

    end TESTPACKAGE;

    2,建立存儲過程,存儲過程為:

    CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS

    BEGIN

    OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;

    END TESTC;

    可以看到,它是把游標(可以理解為一個指針),作為一個out 參數來返回值的。

    java里調用時就用下面的代碼:

    package com.hyq.src;

    import java.sql.*;

    import java.io.OutputStream;

    import java.io.Writer;

    import java.sql.PreparedStatement;

    import java.sql.ResultSet;

    import oracle.jdbc.driver.*;

    public class TestProcedureTHREE {

    public TestProcedureTHREE() {

    }

    public static void main(String[] args ){

    String driver = "oracle.jdbc.driver.OracleDriver";

    String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

    Statement stmt = null;

    ResultSet rs = null;

    Connection conn = null;

    try {

    Class.forName(driver);

    conn = DriverManager.getConnection(strUrl, "hyq", "hyq");

    CallableStatement proc = null;

    proc = conn.prepareCall("{ call hyq.testc(?) }");

    proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);

    proc.execute();

    rs = (ResultSet)proc.getObject(1);

    while(rs.next())

    {

    System.out.println( rs.getString(1) + "  "+rs.getString(2));

    }

    }

    catch (SQLException ex2) {

    ex2.printStackTrace();

    }

    catch (Exception ex2) {

    ex2.printStackTrace();

    }

    finally{

    try {

    if(rs != null){

    rs.close();

    if(stmt!=null){

    stmt.close();

    }

    if(conn!=null){

    conn.close();

    }

    }

    }

    catch (SQLException ex1) {

    }

    }

    }

    }

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 久久精品九九亚洲精品| 亚洲伊人成无码综合网| 日韩免费一区二区三区在线| 久久99热精品免费观看牛牛| 国产午夜无码精品免费看动漫| 久久国产精品免费观看| 久久综合九色综合97免费下载| 免费国产成人午夜在线观看| 91成人免费观看| 99视频全部免费精品全部四虎| 很黄很色很刺激的视频免费| 91视频国产免费| 国产精品国产午夜免费福利看 | 女人裸身j部免费视频无遮挡| 成年免费a级毛片| 久久精品无码专区免费| 免费一区二区三区| 亚洲精品在线免费看| 欧美a级在线现免费观看| 手机看片久久国产免费| 国产日韩成人亚洲丁香婷婷| 亚洲AV午夜成人影院老师机影院| 久久久亚洲欧洲日产国码是AV| 亚洲国产精品综合久久久| 亚洲码和欧洲码一码二码三码 | 亚洲黄色在线电影| 中文文字幕文字幕亚洲色| 亚洲AV无码国产精品永久一区| 一级特黄a免费大片| 久久一区二区三区免费播放| 亚洲高清中文字幕免费| 免费在线观看黄色毛片| 国产亚洲精品国产| 亚洲国产美女精品久久| 老司机免费午夜精品视频| 在线观看免费无码专区| 国产卡二卡三卡四卡免费网址| 免费又黄又爽又猛的毛片| 亚洲AV午夜福利精品一区二区| 最新亚洲卡一卡二卡三新区| 国产精品1024在线永久免费|