sunfruit[請訪問http://www.fruitres.cn]

          --我相信JAVA能走得更遠 QQ:316228067

          JAVA調用返回結果集的存儲過程--Oracle

          ? --sunfruit

          建立存儲過程,存儲過程為:

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

          ????? }

          ??? }

          ? }

          }

          在這里要注意,在執行前一定要先把oracle的驅動包放到class路徑里,否則會報錯的。

          posted on 2006-06-15 09:36 sunfruit 閱讀(733) 評論(0)  編輯  收藏 所屬分類: 數據庫

          主站蜘蛛池模板: 巴中市| 辽阳市| 荃湾区| 平和县| 饶阳县| 襄樊市| 民乐县| 水城县| 仁寿县| 开江县| 梓潼县| 神木县| 嘉峪关市| 隆子县| 汨罗市| 大冶市| 双辽市| 陕西省| 罗山县| 方正县| 大方县| 左云县| 商水县| 仁怀市| 北辰区| 翁源县| 贺兰县| 库伦旗| 徐汇区| 饶平县| 玉溪市| 吴忠市| 聂荣县| 庆阳市| 甘肃省| 镇雄县| 永兴县| 枝江市| 福州市| 乌拉特后旗| 双鸭山市|