鷹翔宇空

          學習和生活

          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 閱讀(86497) 評論(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先森
          學習了  回復  更多評論
            

          主站蜘蛛池模板: 怀化市| 兴仁县| 沙雅县| 舒兰市| 江安县| 黄石市| 周口市| 望奎县| 阳谷县| 台前县| 上饶县| 大关县| 遂川县| 澄迈县| 明水县| 金溪县| 衡东县| 浦县| 宣化县| 和龙市| 洛隆县| 灵寿县| 开鲁县| 太和县| 商河县| 临武县| 怀来县| 桐梓县| 雅江县| 北碚区| 峨眉山市| 壶关县| 文山县| 宜春市| 长白| 东明县| 吉木乃县| 始兴县| 喀什市| 夏邑县| 宁蒗|