氧氣中毒 - J2EE

          爪吐奕奕征途
          posts - 24, comments - 10, trackbacks - 0, articles - 0
             :: 首頁 :: 新隨筆 ::  ::  :: 管理

          用SQL語句創(chuàng)建存儲過程

          Posted on 2006-06-14 15:01 氧氣中毒 閱讀(1755) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)處理
          本節(jié)例示一個不帶參數(shù)的簡單存儲過程。多數(shù)存儲過程的功能比本例復(fù)雜多了,但這里主要說明存儲過程的一些基本要點。如前面所述,不同DBMS定義存儲過程的語法是不同的。例如,有些DBMS使用begin . . . end或其他關(guān)鍵字指明存儲過程定義的開始和結(jié)束。在有些DBMS中,下面的SQL語句可創(chuàng)建一個存儲過程:

          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來創(chuàng)建Statement對象,用于把創(chuàng)建存儲過程的SQL語句發(fā)送給數(shù)據(jù)庫:

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

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

          從JDBC調(diào)用存儲過程

          JDBC允許在用Java編寫的程序中調(diào)用存儲過程。第一步是創(chuàng)建一個CallableStatement對象。就像Statement和PreparedStatement對象一樣,利用一個打開的Connection對象即可完成創(chuàng)建。CallableStatement對象包含了存儲過程的一個調(diào)用;但它不包含存儲過程本身。下面的第一行代碼使用連接con創(chuàng)建了存儲過程SHOW_SUPPLIERS的一個調(diào)用。花括號內(nèi)的那部分就是存儲過程的轉(zhuǎn)義語法。當驅(qū)動程序碰到“{call SHOW_SUPPLIERS}”時,它將把這個轉(zhuǎn)義語法轉(zhuǎn)換成數(shù)據(jù)庫使用的本地SQL,以調(diào)用名為SHOW_SUPPLIERS的存儲過程。

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

          執(zhí)行后結(jié)果集rs的內(nèi)容如下:

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

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

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

          主站蜘蛛池模板: 特克斯县| 扬中市| 普定县| 茌平县| 图木舒克市| 兴国县| 南丰县| 胶州市| 平陆县| 萨嘎县| 冕宁县| 德惠市| 普宁市| 梅河口市| 康乐县| 拉萨市| 建德市| 习水县| 锡林郭勒盟| 剑川县| 将乐县| 华亭县| 孟连| 伊金霍洛旗| 西平县| 盐亭县| 南充市| 金昌市| 佛坪县| 沙田区| 和静县| 望谟县| 武穴市| 青冈县| 宁德市| 涿州市| 西宁市| 常宁市| 宁武县| 大足县| 慈利县|