詳例實(shí)現(xiàn)java調(diào)用oracle的存儲(chǔ)過程代碼_第1頁(yè)
詳例實(shí)現(xiàn)java調(diào)用oracle的存儲(chǔ)過程代碼_第2頁(yè)
詳例實(shí)現(xiàn)java調(diào)用oracle的存儲(chǔ)過程代碼_第3頁(yè)
詳例實(shí)現(xiàn)java調(diào)用oracle的存儲(chǔ)過程代碼_第4頁(yè)
詳例實(shí)現(xiàn)java調(diào)用oracle的存儲(chǔ)過程代碼_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、詳例實(shí)現(xiàn) java 調(diào)用 ORACLE 的過程代碼本篇文章主要是在 java 中調(diào)用 ORACLE家做一個(gè)參考:過程,并把要用到的過程和代碼列了出來,給大一:無返回值的過程為:過程CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) ASBEGININSERTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);END TESTA;然后呢,在 java 里調(diào)用時(shí)就用下面的代碼:package com.hyq.src;import java.sql.*; import

2、java.sql.ResultSet; public class TestProcedureOne public TestProcedureOne() public sic void main(String args )String driver = oracle.jdbc.driver.OracleDriver;String strUrl = jdbc:oracle:thin:127.0.0.1:1521: hyq ; Sement stmt = null;ResultSet rs = null; Connection conn = null;CallableSement cstmt = n

3、ull; try Class.forName(driver);conn = DriverManager.getConnection(strUrl, hyq , hyq ); CallableSement proc = null;proc = conn.prepareCall( call HYQ.TESTA(?,?) ); proc.setString(1, 100);proc.setString(2, TestOne); proc.execute();catch (SQLException ex2) ex2.prStackTrace(); catch (Exception ex2) final

4、lytry if(rs != null)rs.close(); if(stmt!=null) if(conn!=null)ex2.prStackTrace(); stmt.close();conn.close();catch (SQLException ex1) 當(dāng)然了,這就先要求要建TESTTB,里面兩個(gè)字段(I_ID,I_NAME)。二:有返回值的過程為:過程(非列表)CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) ASBEGINSELECTO PARA2 FROM TESTTB WHERE I

5、_ID= PARA1;END TESTB;在 java 里調(diào)用時(shí)就用下面的代碼:package com.hyq.src;public class TestProcedureTWO public TestProcedureTWO() public sic void main(String args )String driver = oracle.jdbc.driver.OracleDriver;String strUrl = jdbc:oracle:thin:127.0.0.1:1521:hyq; Sement stmt = null;ResultSet rs = null; Connectio

6、n conn = null; try Class.forName(driver);conn = DriverManager.getConnection(strUrl, hyq , hyq ); CallableSement proc = null;proc = conn.prepareCall( call HYQ.TESTB(?,?) ); proc.setString(1, 100);proc.registerOutParameter(2, Types.VARCHAR); proc.execute();String testPr= proc.getString(2); System.out.

7、prln(=testPr=is=+testPr);catch (SQLException ex2) ex2.prStackTrace();catch (Exception ex2) finallytry if(rs != null)rs.close(); if(stmt!=null) if(conn!=null)ex2.prStackTrace(); stmt.close();conn.close();catch (SQLException ex1) 注意,這里的 proc.getString(2)中的數(shù)值 2 并非任意的,而是和過程中的 out 列對(duì)應(yīng)的,如果 out是在第一個(gè)位置,那就是

8、proc.getString(1),如果是第三個(gè)位置,就是 proc.getString(3),當(dāng)然也可以同時(shí)有多個(gè)返回值,那就是再多加幾個(gè)out 參數(shù)了。Jsp 中調(diào)用Oracle過程的小例子*執(zhí)行 條insert 語句并傳參數(shù)*/create or replace procedure p_test2(i in number) asbegininserto t values (i,x|to_char(i);commit;end;/aaabbb%String driver = oracle.jdbc.driver.OracleDriver;String strUrl = jdbc:oracle

9、:thin:192.168.1.6:1521:db;Class.forName(driver);Connection conn = DriverManager.getConnection(strUrl, scott, tiger);String procedure = call p_test2 (?) ;CallableS ement cstmt = conn.prepareCall(procedure);cstmt.(1,33);cstmt.executeUpdate ;S ement stmt = conn.createS ement ;ResultSet rs = stmt.execut

10、eQuery(select * from t);while(rs.next )out.prln( + rs.getString(1) + + rs.getString(2) + );rs.close ;stmt.close ;conn.close ;%Java 調(diào)用SQL Server過程(四種情況考慮介紹)來源:2008-04-22 發(fā)布人: 瀏覽:719 人次字體: 大 中小Java 調(diào)用SQL Server 的過程詳解,本文具體介紹如下:使用不帶參數(shù)的過程,使用帶有輸過程,使用帶有更新入?yún)?shù)的過程,使用帶有輸出參數(shù)的過程,使用帶有返回狀態(tài)的計(jì)數(shù)的過程1 使用不帶參數(shù)的過程使用 JDBC

11、驅(qū)動(dòng)程序調(diào)用不帶參數(shù)的轉(zhuǎn)義序列的語法如下所示:call procedure-name過程時(shí),必須使用 call SQL 轉(zhuǎn)義序列。不帶參數(shù)的 call作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫(kù)中創(chuàng)建以下CREATE PROCEDURE GetContactFormalNames ASBEGIN過程:SELECT TOP 10 Title + +Name + + LastName AS FormalNameFROMEND 此.Contact過程返回單個(gè)結(jié)果集,其中包含一列數(shù)據(jù)(由.Contact 表中前十個(gè)聯(lián)系人的稱呼、名稱和姓氏組成)。在下面的實(shí)例中

12、,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫(kù)的打開連接,然后使用executeQuery 方法調(diào)用 GetContactFormalNames過程。public sic voidtry .oParams(Connection con) .Sement stmt = con.createSement();ResultSet rs = stmt.executeQuery(call dbo.GetContactFormalNames); while (rs.next() .System.out.prln(rs.getString(FormalName);rs.close();stmt.

13、close();catch (Exception e) . e.prStackTrace();2 使用帶有輸入?yún)?shù)的過程使用 JDBC 驅(qū)動(dòng)程序調(diào)用帶參數(shù)的prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。帶有過程時(shí), 必須結(jié)合 SQLServerConnection 類的IN 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:call procedure-name(parameter,parameter.)構(gòu)造 call 轉(zhuǎn)義序列時(shí),請(qǐng)使用 ?(問號(hào))字符來指定 IN 參數(shù)。此字符充當(dāng)要傳遞給該過程的參數(shù)值的占位符??梢允褂?SQLServreparedSement 類的 setter

14、方法之一為參數(shù)指定值??墒褂玫?setter 方法由 IN 參數(shù)的數(shù)據(jù)類型決定。向 setter 方法傳遞值時(shí),不僅需要指定要在參數(shù)中使用的實(shí)際值,還必須指定參數(shù)在過程中的序數(shù)位置。例如,如果過程包含單個(gè) IN 參數(shù),則其序數(shù)值為 1。如果過程包含兩個(gè)參數(shù),則第一個(gè)序數(shù)值為 1,第二個(gè)序數(shù)值為 2。作為如何調(diào)用包含 IN 參數(shù)的中的 uspGetEmployeeManagers是一個(gè)整數(shù)值),然后基于指定的過程的 Java 代碼:過程的實(shí)例,使用 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫(kù)過程。此過程接受名為 EmployeeID 的單個(gè)輸入?yún)?shù)(它Employe

15、eID 返回雇員及其經(jīng)理的遞歸列表。下面是調(diào)用此public sic void executeSprocInParams(Connection con) . try .PreparedSement pstmt = con.prepareSement(call dbo.uspGetEmployeeManagers(?); pstmt.set(1, 50);ResultSet rs = pstmt.executeQuery();while (rs.next() .System.out.pr System.out.pr System.out.pr System.out.prrs.getString(

16、ManagerSystem.out.prrs.close(); pstmt.close();catch (Exception e) .ln(EMPLOYEE:);ln(rs.getString(LastName) + , + rs.getString( ln(MANAGER:);Name);ln(rs.getString(ManagerLastName)+,+Name);ln();e.prStackTrace();3 使用帶有輸出參數(shù)的過程使用 JDBC 驅(qū)動(dòng)程序調(diào)用此類過程時(shí),必須結(jié)合 SQLServerConnection 類的 prepareCall方法使用 call SQL 轉(zhuǎn)義序列。

17、帶有 OUT 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:call procedure-name(parameter,parameter.)構(gòu)造 call 轉(zhuǎn)義序列時(shí),請(qǐng)使用 ?(問號(hào))字符來指定 OUT 參數(shù)。此字符充當(dāng)要從該過程返回的參數(shù)值的占位符。 要為 OUT 參數(shù)指定值, 必須在運(yùn)行SQLServerCallableSement 類的 registerOutParameter 方法指定各參數(shù)的數(shù)據(jù)類型。過 程前使用使用 registerOutParameter 方法為 OUT 參數(shù)指定的值必須是 java.sql.Types 所包含的 JDBC數(shù)據(jù)類型之一,而它又被 當(dāng)您對(duì)于 OUT

18、參數(shù)向的數(shù)據(jù)類型,而且必須在成本地 SQL Server 數(shù)據(jù)類型之一.registerOutParameter 方法傳遞一個(gè)值時(shí),不僅必須指定要用于此參數(shù)過程中指定此參數(shù)的序號(hào)位置或此參數(shù)的名稱。例如,如果過程包含單個(gè) OUT 參數(shù),則其序數(shù)值為 1;如果個(gè)序數(shù)值為 2。作為實(shí)例,在 SQL Server 2005 AdventureWorks過程包含兩個(gè)參數(shù),則第一個(gè)序數(shù)值為 1,第二示例數(shù)據(jù)庫(kù)中創(chuàng)建以下過程:根據(jù)指定的整數(shù) IN 參數(shù) (employeeID) , 該過程也返回單個(gè)整數(shù) OUT 參數(shù) (managerID) 。根據(jù)EmployeeID,OUT 參數(shù)中返回的值為 Manag

19、erID。HumanResour.Employee 表中包含的在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫(kù)的打開連接,然后使用 execute方法調(diào)用 GetImmediateManager過程:public sic void executeStoredProcedure(Connection con) . try .CallableSement cstmt = con.prepareCall(call dbo.GetImmediateManager(?, ?);cstmt.set(1, 5);cstmt.registerOutParameter(2, java.s

20、ql.Types.cstmt.execute();EGER);System.out.prln(MANAGER ID: + cstmt.get(2);catch (Exception e) . e.prStackTrace();本示例使用序號(hào)位置來標(biāo)識(shí)參數(shù)?;蛘?,也可以使用參數(shù)的名稱(而非其序號(hào)位置)來標(biāo)識(shí)此參數(shù)。下面的代碼示例修改了上一個(gè)示例,以說明如何在 Java 應(yīng)用程序中使用命名參數(shù)。請(qǐng)注意,這些參數(shù)名稱對(duì)應(yīng)于過程的定義中的參數(shù)名稱:CREATE PROCEDURE GetImmediateManageremployeeIDmanagerID,OUTPUTAS BEGINSELECT m

21、anagerID = ManagerIDFROM HumanResour.EmployeeWHERE EmployeeID = employeeIDEND過程可能返回更新計(jì)數(shù)和多個(gè)結(jié)果集。SQL Server 2005 JDBC Driver 遵循JDBC 3.0 規(guī)范,此規(guī)范規(guī)定在檢索 OUT 參數(shù)之前應(yīng)檢索多個(gè)結(jié)果集和更新計(jì)數(shù)。也就是說,應(yīng)用程序應(yīng)先檢索所有 ResultSet 對(duì)象和更新計(jì)數(shù),然后使用 CallableSement.getter 方法檢索 OUT參數(shù)。否則,當(dāng)檢索 OUT 參數(shù)時(shí),尚未檢索的 ResultSet 對(duì)象和更新計(jì)數(shù)將丟失。4 使用帶有返回狀態(tài)的過程使用 JDB

22、C 驅(qū)動(dòng)程序調(diào)用這種過程時(shí),必須結(jié)合 SQLServerConnection 類的 prepareCall方法使用 call SQL 轉(zhuǎn)義序列。返回狀態(tài)參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:?=call procedure-name(parameter,parameter.)構(gòu)造 call 轉(zhuǎn)義序列時(shí),請(qǐng)使用 ?(問號(hào))字符來指定返回狀態(tài)參數(shù)。此字符充當(dāng)要從該過程返回的參數(shù)值的占位符。 要為返回狀態(tài)參數(shù)指定值, 必須在執(zhí)行SQLServerCallableSement 類的 registerOutParameter 方法指定參數(shù)的數(shù)據(jù)類型。過程前使用此外,向 registerOutPara

23、meter 方法傳遞返回狀態(tài)參數(shù)值時(shí),不僅需要指定要使用的參數(shù)的數(shù)據(jù)類型,還必須指定參數(shù)在過程中的序數(shù)位置。對(duì)于返回狀態(tài)參數(shù),其序數(shù)位置始終為 1,這過程時(shí)的第一個(gè)參數(shù)。盡管 SQLServerCallableSement 類支持使用參數(shù)是因?yàn)樗冀K是調(diào)用的名稱來指示特定參數(shù),但您只能對(duì)返回狀態(tài)參數(shù)使用參數(shù)的序號(hào)位置作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫(kù)中創(chuàng)建以下CREATE PROCEDURE CheckContactCity (cityName CHAR(50)AS BEGINIF (SELECT COUNT(*)。過程:FROM.Addre

24、ssWHERE City = cityName) 1) RETURN 1ELSERETURN 0END該過程返回狀態(tài)值 1 或 0,這取決于是否能在表.Address 中找到 cityName參數(shù)指定的城市。在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例數(shù)據(jù)庫(kù)的打開連接,然后使用 execute方法調(diào)用 CheckContactCity過程:public sic void executeStoredProcedure(Connection con) . try .CallableSement cstmt = con.prepareCall(? = call dbo.CheckContactCity(?);cstmt.registerOutParameter(1, java.sql.Types.EGER);cstmt.setString(2, cstmt.execute();anta);System.out.prln(RETURN SUS: + cstmt.get(1);cstmt.close();catch (Exception e) . e.prStackTrace();5 使用帶有更新計(jì)數(shù)的過程使用 SQLServerCallableSeme

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論