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 閱讀(734) 評論(0)  編輯  收藏 所屬分類: 數據庫

          主站蜘蛛池模板: 德兴市| 乌海市| 安龙县| 丰城市| 全椒县| 泗阳县| 望奎县| 综艺| 舟曲县| 上杭县| 昌平区| 汪清县| 南安市| 汨罗市| 涿州市| 翼城县| 邹平县| 铜梁县| 平南县| 廉江市| 隆回县| 万安县| 崇仁县| 偏关县| 嵩明县| 临湘市| 永和县| 象州县| 辽中县| 古浪县| 双牌县| 时尚| 琼海市| 黄大仙区| 观塘区| 永嘉县| 竹山县| 江安县| 石泉县| 昌江| 家居|