java調用oracle存儲過程精彩總結._第1頁
java調用oracle存儲過程精彩總結._第2頁
java調用oracle存儲過程精彩總結._第3頁
java調用oracle存儲過程精彩總結._第4頁
java調用oracle存儲過程精彩總結._第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1.基本結構CREATE OR REPLACEPROCEDURE 存儲過程名字(參數 1 IN NUMBER,參數 2 IN NUMBER)is變量 1 INTEGER :=0;變量2 DATE;BEGINEND存儲過程名字2.SELECT INTO STATEMENT將select查詢的結果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條記錄,否則拋出異常(如果沒有記錄拋出 NO_DATA_FOUND)例子:BEGINSELECT col1,col2 into變量 1,變量 2 FROM typestruct where xxx;EXCEPTIONWHEN NO_DATA_FOUND

2、 THENxxxx;END;一:無返回值的存儲過程存儲過程為:CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) ASBEGININSERT INTO HYQ.BD (I_ID,I_NAME) S (PARA1, PARA2);END TESTA;然后呢,在java里調用時就用下面的代碼:package com.hyq.src;import java.sql.*;import java.sql.ResultSet;public class TestProcedureOne public TestProce

3、dureOne() 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.getConne

4、ction(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();finallytry if(rs != null)rs.close();if(st

5、mt!=null)stmt.close();if(conn!=null)conn.close();catch (SQLException ex1) 當然了,這就先要求要建張表TESTTB,里面兩個字段(l_ID , l_NAME )。二:有返回值的存儲過程(非列表)存儲過程為:CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) ASBEGINSELECT INTO PARA2 FROM TESTTB WHERE lD= PARA1;END TESTB;在java里調用時就用下面的代碼:package c

6、om.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

7、= 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 (

8、SQLException ex2) ex2.printStackTrace();catch (Exception ex2) ex2.printStackTrace();finallytry 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,如果是第三個位置,就是proc.ge

9、tString(3),當然也可以同時有多個返回值,那就是再多加幾個out參數了。三:返回列表由于oracle存儲過程沒有返回值,它的所有返回值都是通過out參數來替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數,必須要用pagkage 了 .所以要分兩部分,1,建一個程序包。如下:CREATE OR REPLACE PACKAGE TESTPACKAGE ASTYPE Test_CURSOR IS REF CURSOR;end TESTPACKAGE;2,建立存儲過程,存儲過程為:CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TEST

10、PACKAGE.Test_CURSOR) ISBEGINOPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;END TESTC;在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 TestProcedure

11、THREE 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(str

12、Url, hyq, hyq);CallableStatement proc = null;proc = conn.prepareCall( call hyq.testc(?) );proc.register0utParameter(1,oracle.jdbc.0racleTypes.CURS0R);proc.execute();rs = (ResultSet)proc.getObject(1);while(rs.next()System.out.println(vtd + rs.getString(l) +v/td+rs.getString(2)+v/tdv/tr);catch (SQLException ex2) ex2.printStackTrace();catch (Excepti

溫馨提示

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

評論

0/150

提交評論