開拓自己

          NeverDrop

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            0 隨筆 :: 14 文章 :: 0 評論 :: 0 Trackbacks
          本節例示一個不帶參數的簡單存儲過程。多數存儲過程的功能比本例復雜多了,但這里主要說明存儲過程的一些基本要點。如前面所述,不同DBMS定義存儲過程的語法是不同的。例如,有些DBMS使用begin . . . end或其他關鍵字指明存儲過程定義的開始和結束。在有些DBMS中,下面的SQL語句可創建一個存儲過程:

          create procedure SHOW_SUPPLIERS
          as
          select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME
          from SUPPLIERS, COFFEES
          where SUPPLIERS.SUP_ID = COFFEES.SUP_ID
          order by SUP_NAME
          

          下面的代碼將SQL語句放到一個字符串中,然后賦給變量createProcedure以備后用:

          String createProcedure = "create procedure SHOW_SUPPLIERS " +
          			 "as " +
          			 "select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " +
          			 "from SUPPLIERS, COFFEES " +
          			 "where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +
          			 "order by SUP_NAME";
          

          下面的代碼段使用Connection對象con來創建Statement對象,用于把創建存儲過程的SQL語句發送給數據庫:

          Statement stmt = con.createStatement();
          stmt.executeUpdate(createProcedure);
          

          存儲過程SHOW_SUPPLIERS將作為一個可調用的數據庫對象在數據庫中編譯并存儲,調用時就像調用其他方法一樣。

          從JDBC調用存儲過程

          JDBC允許在用Java編寫的程序中調用存儲過程。第一步是創建一個CallableStatement對象。就像Statement和PreparedStatement對象一樣,利用一個打開的Connection對象即可完成創建。CallableStatement對象包含了存儲過程的一個調用;但它不包含存儲過程本身。下面的第一行代碼使用連接con創建了存儲過程SHOW_SUPPLIERS的一個調用?;ɡㄌ杻鹊哪遣糠志褪谴鎯^程的轉義語法。當驅動程序碰到“{call SHOW_SUPPLIERS}”時,它將把這個轉義語法轉換成數據庫使用的本地SQL,以調用名為SHOW_SUPPLIERS的存儲過程。

          
          CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
          ResultSet rs = cs.executeQuery();
          

          執行后結果集rs的內容如下:

          SUP_NAME			COF_NAME
          ----------------		-----------------------
          Acme, Inc.			Colombian
          Acme, Inc.			Colombian_Decaf
          Superior Coffee			French_Roast
          Superior Coffee			French_Roast_Decaf
          The High Ground			Espresso
          

          注意,用于執行cs的方法是executeQuery,因為cs調用的存儲過程包含一個查詢,執行后產生一個結果集。如果存儲過程包含一條更新或一條DLL語句,那就要使用executeUpdate方法。但有時一個存儲過程包含多條SQL語句,因而它產生的不只是一個結果集、不只是一個更新計數或產生一些結果集和更新計數的組合。這樣就有多個結果集,這時就應該使用execute方法來執行CallableStatement。

          CallableStatement類是PreparedStatement的子類,因此CallableStatement對象可與PreparedStatement對象一樣帶有輸入參數。此外,CallableStatement對象還可帶輸出參數或輸入/輸出參數。INOUT參數和execute方法很少使用。要獲取更詳細信息,請參考“使用Java進行JDBC數據庫訪問”。

          posted on 2006-12-18 20:46 誠夏徠 閱讀(1695) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 孝昌县| 广西| 珠海市| 石河子市| 昌图县| 泉州市| 台北市| 东海县| 文水县| 固始县| 武威市| 甘南县| 太湖县| 楚雄市| 莎车县| 双江| 建水县| 米脂县| 电白县| 宿州市| 焉耆| 陈巴尔虎旗| 丁青县| 湖南省| 柘城县| 玉龙| 青神县| 铜陵市| 临夏市| 分宜县| 聂拉木县| 商水县| 宜宾市| 沙雅县| 济源市| 新野县| 富源县| 莒南县| 贡觉县| 延安市| 布尔津县|