技术活动
CUUG学员就业信息
学员感言、就业资讯
报名热线
文档
当前您的位置:首页 > 技术活动 > 技术中心 > 文档
用Java调用Oracle存储过程总结(二)-CUUG

  三、返回列表

  由于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 BOM.TESTTB;

  END TESTC;

  可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。

  在Java里调用时就用下面的代码:

  在这里要注意,在执行前一定要先把Oracle的驱动包放到class路径里,否则会报错的。

  package com.yiming.procedure.test;

  import java.sql.CallableStatement;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.ResultSet;

  import java.sql.SQLException;

  import java.sql.Statement;

  public class TestProcedureDemo3 {

  public static void main(String[] args) {

  String driver = "Oracle.jdbc.driver.OracleDriver";

  String strUrl = "jdbc:Oracle:thin:@10.20.30.30:1521:vasms";

  Statement stmt = null;

  ResultSet rs = null;

  Connection conn = null;

  CallableStatement proc = null;

  try {

  Class.forName(driver);

  conn = DriverManager.getConnection(strUrl, "bom", "bom");

  proc = conn.prepareCall("{ call bom.testc(?) }");

  proc.registerOutParameter(1, Oracle.jdbc.OracleTypes.CURSOR);

  proc.execute();

  rs = (ResultSet) proc.getObject(1);

  while (rs.next()) {

  System.out.println("" + rs.getString(1) + ""

  + rs.getString(2) + "");

  }

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

  }

  }

  }

  }