<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java調用oracle存儲過程的示例總結

      學生在學習jdbc的時候,會問到怎么調用存儲過程,現在將java調用oracle存儲過程的示例總結如下。(關于調用sqlserver的存儲過程將在下次進行小結請關注)

      一:無返回值的存儲過程

      存儲過程為:

      ? create or replace procedure adddept(deptno number,dname varchar2,loc varchar2)

      ? as

      ? begin

      ? insert into dept values(deptno,dname,loc);

      ? end;

      然后呢,在java里調用時就用下面的代碼:

      ? public class TestProcedure {

      ? Connection conn=null ;

      ? CallableStatement cstmt=null ;

      ? PreparedStatement pstmt=null ;

      ? String url="jdbc:oracle:thin:@localhost:1521:mydb";

      ? String driver="oracle.jdbc.driver.OracleDriver";

      ? String name="";

      ? public TestProcedure() {

      ? try {

      ? Class.forName(driver);

      ? conn=DriverManager.getConnection(url,"scott","tiger");

      ? cstmt=conn.prepareCall("{call adddept(?,?,?)}");

      ? cstmt.setInt(1,13);

      ? cstmt.setString(2,"間諜部2");

      ? cstmt.setString(3,"ningbo2");

       cstmt.executeUpdate();

      ?

      ? System.out.println("success");

      ? }

      ? catch (Exception e){e.printStackTrace();}

      ? finally{

      ? cstmt.close();

      ? conn.close();

      ? }

      ? }

      ? }

      dept表為oracle數據庫方案scott中的一個表

      二:有返回值的存儲過程(非列表)

      存儲過程為:

      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) {

      }

      }

      }

      }

       

      posted @ 2010-07-12 22:44  chinaifne  閱讀(630)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲自拍偷拍中文字幕色| 国产边打电话边被躁视频| 女同久久一区二区三区| 午夜三级成人在线观看| 久久美女夜夜骚骚免费视频| 日本大片免A费观看视频三区| 巢湖市| 色94色欧美sute亚洲线路二| 日本高清中文字幕免费一区二区| 双乳奶水饱满少妇呻吟免费看| 亚洲精品一品二品av| 永清县| 精品少妇av蜜臀av| 99中文字幕国产精品| 免费无码va一区二区三区| 欧美成年性h版影视中文字幕| 精品国产迷系列在线观看| 亚洲av熟女国产一二三| 熟妇无码熟妇毛片| 免费视频欧美无人区码| 徐汇区| 精品国产午夜福利在线观看 | 亚洲精品国产免费av| 人妻综合专区第一页| 亚洲精品日韩在线丰满| 蜜桃AV抽搐高潮一区二区| 少妇人妻偷人精品视蜜桃| 黑山县| 乱码午夜-极品国产内射| 色窝窝免费一区二区三区| 国产免费一区二区不卡| 高清在线一区二区三区视频| 欧洲码亚洲码的区别入口| 四虎在线永久免费看精品| 亚洲成人高清av在线| 婷婷丁香五月深爱憿情网| 免费看欧美全黄成人片| 丝袜a∨在线一区二区三区不卡| 欧美性xxxxx极品少妇| 国产精品国产片在线观看| 乱码午夜-极品国产内射|