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

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

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

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

    這段時間開始學習寫存儲過程,主要原因還是因為工作需要吧,本來以為很簡單的,但幾經挫折,豪氣消磨殆盡,但總算搞通了,為了避免后來者少走彎路,特記述與此,同時亦對自己進行鼓勵。

    一:無返回值的存儲過程

    存儲過程為:

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

    BEGIN

       INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);

    END TESTA;

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

    package com.hyq.src;

     

    import java.sql.*;

    import java.sql.ResultSet;

     

    public class TestProcedureOne {

      public TestProcedureOne() {

      }

      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;

        CallableStatement cstmt = null;

     

        try {

          Class.forName(driver);

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

          CallableStatement proc = null;

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

          proc.setString(1, "100");

          proc.setString(2, "TestOne");

          proc.execute();

        }

        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) {

          }

        }

      }

    }

    當然了,這就先要求要建張表TESTTB,里面兩個字段(I_IDI_NAME)。

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

    存儲過程為:

    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("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>");

          }

        }

        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) {

          }

        }

      }

    }

    在這里要注意,在執行前一定要先把oracle的驅動包放到class路徑里,否則會報錯的。

    如果有什么問題呢,可以和我聯系hnlyhyq@163.com;qq:77542728.

    我的心愿,愿中國的程序員早日達到世界水平,領先世界科技。

    posted on 2005-12-13 11:05 TrampEagle 閱讀(86494) 評論(100)  編輯  收藏 所屬分類: 學習體會

    Feedback

    # re: 用java調用oracle存儲過程總結 2005-12-26 17:35 江波
    謝謝,,  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2005-12-26 17:36 江波
    你能不能加我,,,我們共同學習哈。。
    42401916  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2005-12-28 08:28 TrampEagle
    這本就是個相互交流學習的平臺,所以不用客氣的。你當然可以成為我的好友的,共同學習,共同努力!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-01-09 09:36 張偉
    收益良多,十分感謝;希望能成為好友,共同學習進步!qq:349477837  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-01-10 14:02 ice
    垃圾代碼
    中國怎么有這么多的垃圾程序員,去死吧 還希望早日達到世界水平 笑話!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-01-10 14:29 TrampEagle
    TO ice:
    首先向你致歉,可能這些代碼沒有使你能夠如愿正常進行你的工作;
    其次,我想聲明一點,這里的代碼只是介紹一種方法,提供一種途徑,我的本意是為自己做筆記的,其次才是能不能為他人做點貢獻,所以有的地方可能不太完善,為自己的做法致歉。
    但是,通過謾罵就能解決問題嗎?既然這方面,我們存在溝壑,我們就應該好好溝通一下,對你我想也不會有壞處的。如果你有什么問題,可以通過我的聯系方式同我聯系!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-01-12 11:43 ryan
    我也研究Java調Oracle Store Procedure一段時間,發現一些問題
    主要是Open 的Cursor不會釋放,v$open_cursor只增長不減少,最后服務器只能重起。
    希望能交流。QQ:22828569  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-03-10 16:41 Janson
    你的文章發布的真是太好了!我找這方面的例子已經一個星期了,終于在你這能夠執行了,呵呵,從此我也可以練習使用oracle的存儲過程了。哥們,真的謝了!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-03-10 21:51 TrampEagle
    @Janson
    能幫上你的小忙是我萬分的榮幸,呵呵!
    其實,我學習存儲過程時,就是因為找不到這方面的完整例子花費了不少時間,所以記于此,一是作筆記,另外給需要這方面知識的朋友提供一份參考,使他們少走一些彎路。
    希望大家都能把自己的一些心得體會發布出來,互相幫助,共同進步!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-03-28 14:39 ajian005
    可以少走彎路 , 謝謝 !  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-05-29 18:13 TrampEagle
    補充一個使用oracle存儲過程分頁的小例子:
    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,lowerNum in numeric,higherNum in numeric) is
    begin
    OPEN p_CURSOR FOR select * from ( select row_.*, rownum rownum_ from (select id,title,status from HYQTEST) row_ where rownum <= higherNum) where rownum_ >lowerNum;
    end TESTC;

    使用plsql測試:
    declare
    lowerNum integer;
    higherNum integer;
    id varchar2(10);
    title varchar2(500);
    status numeric;
    c testpackage.Test_CURSOR;
    rownum_ integer;
    begin
    lowerNum:=1;
    higherNum:=10;
    TESTC(c,lowerNum,higherNum);
    LOOP
    FETCH c INTO id,title,status,rownum_;
    EXIT WHEN c%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('=行號='||rownum_||'=='||id||'==='||title||'===='||status||'==');
    END LOOP;
    CLOSE c;

    end;

      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-07-12 13:18 yclc
    似乎使用cStmt.getResultSet() 可以直接獲取procedure中執行過的select  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-08-09 09:43 wu
    呵呵~我也找了挺長時間了,正好用上,謝謝 a lot 了哈哈。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-08-14 10:43 才子
    謝謝你了,大哥  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-08-23 17:25 不斷學習是責任
    謝謝了,受益不少.  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-09-29 17:13 coldiced
    謝謝幫助,支持樓主!鄙視牛人!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-10-31 19:46 zdl
    應該好好學習,支持下樓主  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-11-25 11:02
    頂一下  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-12-14 11:44 ipxzerg
    樣例的技術含量和代碼的水平有待提高,不過還是支持一下,希望樓主加強學習。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2006-12-23 23:37 vally
    太感謝了,正急需這倆方面的信息,今天一找就給全部找到了!希望樓主能多發布些好資料呀!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-02-14 14:07 在線視頻
    不錯,3種情況都介紹了  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-03-30 13:34 fdfd
    dffdfddff  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-03-30 14:11 aa
    中國程序員什么 時候才到世界水平呢?難,少  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-04-27 14:16 sd
    加油  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-05-10 15:28 Laurence.Lee
    up!
    up!
    Thanks a lot!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-05-22 11:54 ade
    謝謝分享!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-06-04 11:28 學習ing
    頂以下  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-07-13 11:24 huraky
    謝謝樓主,收益不少!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-07-17 17:24 zbc
    真的寫得很好..
    是個學習的好例子.  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2007-07-22 00:43
    非常感謝樓主,我找這樣的例子找了好久,我原來用sqlserver,現轉oracle,兩者差別太大,在sqlserver中輕松能搞定的存儲過程在oracle中有點束手無冊了,查了很多資料,也沒搞明白,看了你的例子,受益非淺,可以加你的QQ不,我的QQ:663535631

      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-08-14 16:35 bai
    總結得很好
    頂!!!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-08-26 18:16 可可
    不錯啊  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-09-07 14:33 little star
    特別鄙視哪個說話垃圾的.
    我覺得樓主很不錯的,把自己做出來的東西跟大家一起分享,雖然這個代碼簡單了點,但也有很多人看到后受到啟發.在國內做東西,每個人的思路都不一樣,實現的方式也可能不一樣,象你那樣說完全沒有必要,你覺得不合適你,你可以不看.  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-09-18 13:41 饒志華
    謝謝分享  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-10-10 17:49 Roger Gao
    數據類型是table,元素類型是Record的存儲過程調用過嗎?  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2007-11-10 16:26 123
    能用存儲過程操作文件嗎 能用oracle調用java程序刪除文件嗎 有的話 請說出來 共同研究 你的文章很有用   回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2007-12-28 16:52 jedi
    多謝,轉到偶的BLOG上收藏了  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-03-18 19:45 gma
    @ice
    你寫一個不垃圾的給瞧瞧!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-03-24 11:39 Irene
    正好我也要學習存儲過程,感謝lz  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-03-31 11:59 hao
    我剛開始學存儲過程,多謝啦!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2008-04-01 09:47 aa
    你他媽的狗屎,不要亂說別人的代碼不好,有本領把你寫的share出來,自己寫不出嗎還說別人是垃圾,我看你才是垃圾中的極品  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-04-16 21:28 yangyi
    你寫的太好了
    能否加我啊
    QQ 465937187  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-04-25 00:00 man
    說點題外話,你的文章咬文嚼字的,閑詞廢話和語病很多,希望你盡量用平實直接的表達方式。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-05-13 23:05 xlx
    謝謝  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-05-21 14:39 hello
    為什么我按上面做的,數據庫表里面沒有數據啊  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2008-05-28 15:26 Jerry
    感謝樓主  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-06-26 20:27 杰杰
    非常感謝  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-07-26 12:29 開發者
    寫的還不錯。支持樓主,鄙視那個說臟話的。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2008-07-29 09:17 aa
    你個只會說垃圾的傻B  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2008-08-05 16:45 飛飛
    @ice
    你媽B你有本事你自己寫一個出來,人家寫的不好至少人家給大家分享了,我想大家共同討論才有助于共同提升中國程序員的整體水平吧,你在這兒瞎扯淡有用嗎?
    還是為了顯示自己很牛B啊?  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-08-06 23:09 風中青竹
    不錯,寫得挺詳細哦!!!

    謝謝了!!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-08-19 14:23 afda
    我靠,終于可以運行了。不錯。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-08-28 20:24 wandao
    請問:一:無返回值的存儲過程中 HYQ.B_ID , HYQ是什么,B_ID 是什么?謝謝!!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2008-08-28 21:00 呵呵
    我在oracle 9i 的 isqlplus 中運行 :
    CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
    BEGIN
    SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
    END TESTB;
    老報錯怎么回事?TESTTB 我也建了  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-09-23 15:32 octopus754
    "ice" 同學,通常情況下,高手是會尊重任何人的勞動成果的.  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2008-10-08 13:34 紅狼
    樓主好樣的!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-10-16 17:01 hoho
    非常感謝! 學習了  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-10-23 08:53
    謝謝  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-10-26 19:16 虎虎
    太好了
      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2008-11-28 15:12 linyupei
    我已經加你QQ了 有問題請教要回復哦!
    真的挺好的  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-01-06 22:11 大雨
    很好,學習了,不管怎樣都要努力!樓主肯分享真是太好了,大家都是中國人,又都是學程序的,不要罵來罵去了。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-01-14 18:24 123
    mark  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2009-02-03 17:43 aa
    很好 很常久都帖子啊  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-02-25 21:12 ICC
    謝謝了。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-03-10 14:02 夢想
    你提供的例子對我幫助很大,非常感謝!
    愿中國的程序員早日達到世界水平,領先世界科技。
      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-03-13 13:37 copper
    謝謝了,寫的相當不錯,支持樓主。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-04-04 22:57 小蛇
    謝謝樓主分享, 對java調用的oracle procedure的介紹很簡潔,適合快速入門。
    要知道這篇貼子的主要目的是介紹基本技術,不是什么程序設計技巧和架構。
    我沒看出來哪點垃圾,@ice其實才是一垃圾,是豬,是傻B。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-04-27 18:46 hu
    多謝樓主!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-06-11 10:12 驛陸♂湮華↘
    java調用我明白,可是在PL/SQL中怎么用call語句調用含out參數的存儲過程,弄了半天也不取不出來參數值,如果LZ知道,告知一下,謝謝!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-07-03 13:55 xiao
    proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2009-07-03 15:38 nc000
    proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); 中的1是指什么,麻煩給說明一下  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2010-03-09 14:59 tyzqqq123=163.com
    寫的好,清晰而簡約,有國外技術文章的風格。
    其實簡約而不簡單的程序更能體現出水平,寫的看上去很“難”有不代表技術就好。
    樓主的想法很好,應該好好鼓勵樓主,應該向老外學習,不應該總是一串串罵語。
    我想大家互相鼓勵,相互尊重,中國的程序員一定很快達到世界水平.  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2010-03-17 12:58 過客
    寫的很好,希望像LZ的 人 越來越多,不過提個建議啊 ,效率還是要考慮下 ,呵呵  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2010-03-22 14:20
    加我把,,,我建議還是建一個群交流~373769658  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2010-03-31 14:51 fg
    真是ice@ice
      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2010-09-20 09:51 hong
    樓主寫的棒,總結的棒,如果中國的程序員都有這樣的想法和素質,我想我們國家的程序水平會有質的飛躍。雖然罵人是不對的,但是我覺得樓上的那個ice才是個垃圾,鄙視那個罵人的傻B!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2011-05-03 11:28
    非常感謝。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2011-07-14 20:22 xxx
    niu bi 文檔!!!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2011-07-20 15:03 請教
    樓主,我想問一下,當使用游標獲取了結果集后,如何關閉游標?還是不需要關閉,調用完畢后自動會釋放的?  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2012-03-23 14:52 wu
    頂下  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2012-04-12 23:52 lujb
    我想問一下,怎么實現ORACLE的JAVA調用存儲過程,實現多線程?

    import java.sql.*;
    import java.sql.ResultSet;
    import oracle.jdbc.*;

    public class HistoryDataMove
    {

    public static void main(String[] args) {
    //System.out.println("11111");
    HistoryDataMove schedualed = new HistoryDataMove();
    schedualed.action();
    }

    class RunHandle0 implements Runnable {
    private OracleJavaProc proc = null;
    private String procName = "test";

    RunHandle0(String procName) {
    this.procName = procName;
    this.proc = new OracleJavaProc();
    }

    public void run() {
    try {
    System.out.println(procName);
    proc.procStartup(procName);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

    public class OracleJavaProc {

    public void procStartup(String procName) {
    Connection conn = null;
    try {
    conn = DriverManager.getConnection("jdbc:default:connection:");

    CallableStatement proc = null;
    proc = conn.prepareCall("{call " + procName + "()}");
    proc.execute();
    }
    catch (Exception ex2) {
    ex2.printStackTrace();
    }
    finally{
    try {
    if(conn!=null){
    conn.close();
    }
    }
    catch (SQLException ex1) {
    }
    }
    }
    }
    public void action() {
    RunHandle0 t1 = new RunHandle0("HISDATA_MOVE.test");
    Thread thread1 = new Thread(t1);
    thread1.start();
    RunHandle0 t2 = new RunHandle0("HISDATA_MOVE.test1");
    Thread thread2 = new Thread(t2);
    thread2.start();
    }
    }

    我在myeclipse可以實現多線程,但在ORACLE那,只能是單線程順線執行
    望回復:lujbmail@163.com  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2012-09-10 21:03 路人甲乙丙
    樓主。。你那個返回列表,就是輸出參數是游標的, 調用存儲存過程,不關閉游標? 好像這是不允許的,所以存諸返回結果集,然后在JAVA 中調用,這樣的寫法不合理,會被領導罵啊。。 有沒有更好的方法呢?  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2012-11-10 15:28 菩提
    @ice
    賤人年年有,今年何其多啊!!
      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2012-12-04 14:26 費華樂
    總結的很好,面試官就問我java怎么調用存儲過程。
    我沒回答上來。看了你的總結,清楚多了,謝謝!!!  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2012-12-17 16:12 DDD
    SELECT TESTTB.什么 INTO PARA2 FROM TESTTB WHERE I_ID= PARA1; @呵呵  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2012-12-24 16:00 jac
    call HYB.TESTA(?,?)
    這部分是什么啊  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2013-03-24 12:21 ZW
    終于找到個我這種菜鳥能看懂的代碼啦,雪中送炭呀.頂  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2013-04-01 17:17 tim
    樓主,我想問個問題。我一直不知道你在開頭寫的這段
    CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS

    BEGIN

    INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);

    END TESTA;

    這些sql寫在哪里啊?我在項目里要放在什么地方?這個問題很困惑我!求助!
      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2013-04-10 17:32 hahaWOshiwho

    @tim寫在PLsql developer上吧?或者oracle上?在數據庫上寫存儲過程,然后用java調用.
      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2013-05-14 16:22 xiaoyu
    @tim
    這段肯定是放在數據庫里的啊,存儲過程就是保存在數據庫的一段代碼。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2013-06-13 18:22 chester
    請問樓主 p_CURSOR 是什么?  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2013-06-20 10:47 手酸死
    @ice
    你個sb,兒子。你寫的出來?  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2013-06-20 15:19 111
    @ice
    說實話代碼沒細看 但是看到你說話 我不鎮定了。 為什么美好的生活中總有你這種傻逼。 你是不以為你自己代表中國最先進的生產力了。 達不到先進就是有你這種垃圾  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2013-07-26 16:38 黑貓
    樓主,我在pl/sql中寫
    CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS

    BEGIN

    INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);

    END TESTA;
    運行程序是總是報java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列:
    PLS-00201: 必須聲明標識符 'HYQ.TESTA'錯誤  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2013-08-08 23:16 545
    操你妹  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2014-05-07 10:10 java編程
    @ice
    你媽逼的你會寫你不寫出來,你沒有資格在說罵別人,別他媽的自認為是。小心被車給撞死。  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結[未登錄] 2014-06-06 20:29 匿名
    游標名字@chester
      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2014-08-06 10:58 czgwq344703887
    @little star
    中國的學問博大精深,學無止境,支持樓主  回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2014-08-18 16:12 iversion
    SB一個 不解釋@ice
      回復  更多評論
      

    # re: 用java調用oracle存儲過程總結 2014-10-03 23:35 bean先森
    學習了  回復  更多評論
      

    主站蜘蛛池模板: MM1313亚洲精品无码久久| 美女裸身网站免费看免费网站| 国产免费资源高清小视频在线观看| 一级人做人爰a全过程免费视频| 亚洲一区二区三区电影| 亚洲精品成人网久久久久久| 黄页网站免费在线观看| 国产成人精品无码免费看| 免费看一级高潮毛片| 亚洲欧美中文日韩视频| 亚洲的天堂av无码| 黄色一级免费网站| 亚洲午夜无码久久久久小说 | 亚洲综合色婷婷七月丁香| 欧美三级在线电影免费| 一级毛片成人免费看免费不卡| 国产亚洲日韩在线a不卡| 亚洲人成网站在线在线观看| 亚洲一卡2卡4卡5卡6卡在线99| 国产成人精品久久亚洲| vvvv99日韩精品亚洲| 国产老女人精品免费视频| 成人免费视频一区二区三区| 在线看片韩国免费人成视频| 69免费视频大片| 亚洲免费视频播放| 91精品免费不卡在线观看| 91福利免费视频| 18pao国产成视频永久免费| 三年片在线观看免费大全电影 | 日韩亚洲国产二区| 四虎影视免费永久在线观看| 国产精品酒店视频免费看| 国产美女精品视频免费观看| 免费a级毛片在线观看| 免费在线观看中文字幕| 久久国产成人亚洲精品影院| 国产成人精品日本亚洲专区61| 亚洲成a人无码av波多野按摩| 国产性生交xxxxx免费| 免费A级毛片无码A|