在Java中调用Oracle包中的过程

转载 2007年09月13日 11:18:00
 一、先在oracle中编写测试过程

1、首选建一个测试表

-- Create table
create table BOOK
(
  BOOKID    VARCHAR2(50) not null,
  BOOKNAME  VARCHAR2(50) not null,
  PUBLISHER VARCHAR2(50) not null,
  PRICE     VARCHAR2(50) null
)

2、编写ORACLE测试过程

CREATE OR REPLACE PACKAGE pkg_test
AS
   TYPE myrctype IS REF CURSOR;

   PROCEDURE get (p_id VARCHAR2, p_str OUT VARCHAR2, p_rc OUT myrctype);
END pkg_test;

/

CREATE OR REPLACE PACKAGE BODY pkg_test
AS
   PROCEDURE get (p_id VARCHAR2, p_str OUT VARCHAR2,p_rc OUT myrctype)
   IS
      sqlstr   VARCHAR2 (500);
   BEGIN
      p_str := 'Hello,may~';
      IF p_id = 'all' THEN
         OPEN p_rc FOR
            SELECT *
              FROM BOOK;
      ELSE
         sqlstr :=
            'select *
           from BOOK where BOOKID=:w_id';
         OPEN p_rc FOR sqlstr USING p_id;
      END IF;
   END get;
END pkg_test;

/

在这里我们建立了一个输入参数,为普通类型,两个输出参数,其中一个为普通VARCHAR2型,另一个为特殊的记录集类型。

(注:在数据库端测试一下这个过程,以确保没有问题,开始下面的操作~:)

 二、编写JAVA代码测试过程

/*
 * 创建日期: 2003-8-8
 */
package JDBC;

/**
 * 作者:may
 * 时间:15:09:23
 */
import java.sql.*;
import oracle.jdbc.driver.*;

 

     public class proctest {
  
  public static void main(String[] args) {
   proctest pc = new proctest();
   pc.ShowContent();
   }
 
  
  String sDBDriver="oracle.jdbc.driver.OracleDriver";
  String sConnStr="jdbc:oracle:thin:@10.3.8.48:1521:ORADB";
  
  
  Connection  connect=null;
  ResultSet rs = null;
  
  public proctest(){
   try{
    Class.forName(sDBDriver);
   }
   catch(ClassNotFoundException e){
    System.err.println(e.getMessage());
   }
  }
  public ResultSet ShowContent()
   
  {
   
   try{
    
    connect = DriverManager.getConnection(sConnStr,"SHUIBJ","SHUIBJ");
    CallableStatement  stmt = connect.prepareCall("{call PKG_TEST.GET(?,?,?)}");
    
    stmt.setString(1,"all");  //输入参数
    
    stmt.registerOutParameter(2,Types.CHAR); //输出参数为普通参数
    stmt.registerOutParameter(3,OracleTypes.CURSOR); //输出参数为结果集参数
     
    stmt.executeQuery();
    
    rs = ((OracleCallableStatement) stmt).getCursor(3); //得到输出结果集参数
    
    ResultSetMetaData rsmd = rs.getMetaData();
    int numberOfColumns = rsmd.getColumnCount();

    String str = stmt.getString(2);
    
  
    System.out.println("第二个参数为:"+str);
    System.out.println("结果集列数"+numberOfColumns);
    
    //列出结果集中的记录
    ResultSetMetaData md = rs.getMetaData();
    int nColumns = md.getColumnCount();
    for (int i=1;i<=nColumns;i++){
     System.out.print(md.getColumnName(i)+((i==nColumns)?"/n":"/t"));
     if(i==2) System.out.print("/t");
    }
    
    while (rs.next()){
     for(int i=1;i<=nColumns;i++){
     System.out.print(rs.getString(i)+((i==nColumns)?"/n":"/t"));
    }
     
    }
   }
   catch(SQLException ex){
    System.err.println(ex.getMessage()+"连数据库有问题!");
   }
   
   return rs;
   
  }
  
}
 
 输出结果为:

第二个参数为:Hello,may~
结果集列数4
BOOKID BOOKNAME  PUBLISHER PRICE
001-22-23-1 jsp 应用开发详解 电子工业出版社 123
123  uml参考手册 机械工业出版社 34

 

在Java语言中调用存储过程、存储函数、包头、包体

需要拷贝连接Oracle的jar包,路径如下图所示: 连接Oracle数据库的代码: package demo.utils; import java.sql.Connection; ...
  • tangliuqing
  • tangliuqing
  • 2014年05月31日 23:36
  • 1225

java调用oracle存储过程例子

1,导jar包---ojdbc6.jar 2,建立一个分页存储过程 create or replace procedure my_page(v_in_tableName in varchar2, ...
  • u013614451
  • u013614451
  • 2015年05月28日 23:42
  • 587

oracle存储过程及Java调用

一个oracle存储过程对象数组参数的例子,Java调用测试通过
  • u013863751
  • u013863751
  • 2015年05月28日 01:14
  • 1794

C#调用Oracle存储过程

1.创建表 create table test (ID number, NAME varchar2(10), SEX varchar2(4), AGE number, ADDRESS v...
  • xwnxwn
  • xwnxwn
  • 2015年10月04日 09:44
  • 457

Oracle中子程序和程序包中的函数

oracle中的函数        oracle中的函数是子程序和程序包中的一部分,函数与过程相似,是数据库中存储的已命名PL/SQL程序块。函数的主要特征是它必须返回一个值。创建函数时通过RETU...
  • adelyspace
  • adelyspace
  • 2013年07月17日 20:26
  • 778

oracle使用UTL_MAIL包实现存储过程邮件发送(转)

邮件通知预警和提示在当前系统中已经是一个比较常见的功能。各类型语言分别针对邮件提供了功能包和API接口方法,本篇介绍如何在PL/SQL代码中使用UTL_MAIL工具包发送邮件,同时还介绍配置中注意的细...
  • it_taojingzhan
  • it_taojingzhan
  • 2015年11月20日 13:48
  • 670

Java中使用ibatis调用Oracle存储过程和函数

Hibernate等提供了全面的数据库封装机制的“全自动化”ORM 实现,“全自动”ORM 实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。 ibatis是“半自动化”,并不会...
  • aspnet2002web
  • aspnet2002web
  • 2016年04月12日 18:42
  • 1656

spring调用Oracle存储过程,并返回结果集的完整实例

这是总结以前使用spring调用Oracle存储过程,并用cursor返回结果集的一个完整实例,希望能对大家有帮助。  1. 创建表:  Java代码   create ...
  • ylc9527
  • ylc9527
  • 2013年09月03日 10:53
  • 1788

将java的jar包导入oracle,通过oracle调用java方法

最近项目上遇到一个问题,因为项目一些数据设计保密的问题,所以数据库的很多数据都是脱敏存储的;但是需求又需要去模糊查询,这就蛋疼了, 由于项目是用base64脱敏的;第一次想到了把条件进行脱敏之后去数据...
  • z654893465
  • z654893465
  • 2017年06月19日 19:54
  • 1088

java调用oracle中输入参数是数组类型的函数或者存储过程

这次遇到一个开发需求,提供一个接口,输入参数是数组类型,要通过oracle封装的函数进行调用,返回结果也是一个数组。 记录一下对这种类型的实现方法,备忘。实际名称中用xxx替换了部分值,参考用 o...
  • wenjinghai
  • wenjinghai
  • 2016年07月28日 16:14
  • 414
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Java中调用Oracle包中的过程
举报原因:
原因补充:

(最多只允许输入30个字)