`

让你 Oracle 的存储过程与Java代码开始进行交互

阅读更多
Oracle 存储过程定义格式如下:
sql 代码
  1. CREATE OR REPLACE PROCEDURE PRO_YOUR_PROCEDURE (   
  2.     ELEMENT_01     IN      ELEMENT_TYPE,  --COMMENTS   
  3.      .......       ....        .....            ....   
  4.     ELEMENT_0S     OUT     ELEMENT_TYPE,  --COMMENTS   
  5.       ....         ...         ...           ....   
  6. )   
  7. AS  
  8.     ARGUMENT_01    ARGUMENT_TYPE(ARGUMENT_RANGE);   
  9.     ...................   
  10. BEGIN  
  11.     --AND YOUR CODE HERE !   
  12. END;   
  13. EXCEPTION   
  14. WHEN  
  15.     OTHERS   
  16. THEN  
  17.     RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);   
  18.     
  19. END;   
  20. COMMIT;--IF YOUR WANT , JUST DO SO !    
  21. END PRO_YOUR_PROCEDURE;  
其中,[RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);]中的“-20003”是 Oracle 提供的用于用户进行错误自定义的扩充代码。其值可以随便定义,但是也有范围: -20000 到-20999的负整数。
注意到,在存储过程的参数定义中除了IN外,还有个OUT,IN类型的参数是很好理解的,其目的是为了让存储过程接收参数。那么OUT也就不难理解,他的职责就是提供存储过程执行过后的返回值并将其返回给调用者供其使用。
要用Java调用存储过程必须引用“import oracle.jdbc.OracleCallableStatement;”类。
Java调用存储过程的基本格式如下所示:
java 代码
  1. public RETURN_TYPE METHOD_NAME(ARGUMENTS,...)throws EXCEPTIONS...{   
  2.         conn=...;//建立数据库连接   
  3.         conn.setAutoCommit(false);//   
  4.         OracleCallableStatement cal = null;   
  5.         try{   
  6.                 cal = (OracleCallableStatement) conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");   
  7.                 //如果你的数据是一堆记录集那么你可能会用下面的方式   
  8.                 for(int i=0;i<...;i++){   
  9.                         cal.setString(1,arguments);   
  10.                         … …  … … … … … … … …   
  11.                         cal.registerOutParameter(n,Types.VARCHAR);   
  12.                         String messages=( (OracleCallableStatement) cal).getString(n);   
  13.                            
  14.                 }   
  15.         }catch(Exception e){   
  16.         try {   
  17.             conn.rollback();   
  18.         }catch(SQLException ex){}   
  19.         }catch(...){...............}finally{   
  20.                 … … … … … …   
  21.                 … … … … … …   
  22.         }   
  23. }  
其中,conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");是存储过程的Java调用声明。
cal.setString(1,arguments);是往存储过程中传入参数
(OracleCallableStatement) cal).getString(n)是从存储过程中得到执行后的返回值,但是,在此之前,你必须使用cal.registerOutParameter(n,Types.VARCHAR);进行声明
分享到:
评论
3 楼 wilddonkey 2008-05-06  
何苦这样写
2 楼 gqf2008 2007-10-11  
存储过程和数据结构定义如下:
CREATE OR REPLACE PACKAGE SmsService
IS
TYPE ret_record is RECORD(
P1 VARCHAR2(20),
P2 VARCHAR2(10));
TYPE msg_array IS TABLE OF ret_record INDEX BY BINARY_INTEGER;
END;

CREATE OR REPLACE PACKAGE gqf
IS
PROCEDURE proc1(para1 in varchar2,para2 out SmsService.msg_array);
END;
=================================================================================================
java代码如下:
OracleCallableStatement proc = null;
try {
proc =(OracleCallableStatement)con.prepareCall("{ CALL gqf.proc1 (?,?) }");
proc.setString(1, req.getPhoneNumber());
proc.registerOutParameter(2, OracleTypes.ARRAY,"SmsService.msg_array");
//proc.registerOutParameter(2, OracleTypes.ARRAY,"MSG_ARRAY");
//proc.registerOutParameter(2, OracleTypes.CURSOR);
//proc.registerOutParameter(2, OracleTypes.PLSQL_INDEX_TABLE);
//proc.registerIndexTableOutParameter(2,100, OracleTypes.OTHER, 100);
proc.execute();
//proc.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (proc != null) {
try {
proc.close();
} catch (SQLException e1) {
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
}
}
}

我试了所有ORACLE的数据类型,要么是在registerOutParameter报错,要么是在execute时报错,错误类型大概就是数据类型错误,要么就是无效的参数名称,网上搜索了很多资料没有找到解决办法,所以来这里问问是否有大侠有类似的开发经验,给小弟我指点一二,不胜感激!
1 楼 redleaf 2007-07-26  
正学习oracle,希望能多写点关于与JAVA交互的例子,期待中......

相关推荐

    java调用Oracle存储过程的代码

    在Java编程中,与Oracle数据库进行交互是常见的需求,尤其是当需要执行复杂的业务逻辑时,我们通常会使用Oracle存储过程。存储过程是预编译的SQL语句集合,它可以提高性能,封装复杂逻辑,并减少网络通信量。本教程...

    java 与 oracle 存储过程

    Java与Oracle存储过程是数据库应用开发中的重要技术结合,它们在企业级系统中广泛使用,尤其是在数据处理和业务逻辑复杂的场景下。Oracle存储过程是一种在数据库服务器端编写的程序,可以包含一系列SQL语句和控制流...

    JAVA调用ORACLE存储过程通用类

    ### JAVA调用ORACLE存储过程通用类 #### 概述 在Java开发中,经常会遇到需要与数据库交互的情况,特别是当涉及到复杂的业务逻辑时,利用数据库的存储过程可以有效地提高程序性能并简化代码结构。本篇文章将详细...

    oracle 存储过程 函数 dblink

    ### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...

    Java调用Oracle存储过程的方法

    本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...

    hibernate query调用oracle存储过程

    而Hibernate作为一种流行的Java持久化框架,它允许开发者通过ORM(对象关系映射)方式与数据库进行交互。本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和...

    java Oracle存储过程分页整理

    本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本概念。分页是将大结果集分割成多个小部分,每次只加载一部分数据到内存中,这样可以减少内存消耗,提高响应速度。在...

    oracle存储过程教程

    在Java开发中,Oracle存储过程常被用于后端数据库操作,与Java应用程序进行交互,实现业务逻辑。 首先,理解存储过程的概念是必要的。存储过程是一组预先编译的SQL语句,它们以函数的形式存储在数据库中,可以接受...

    项目里用到用java写oracle的存储过程,做个备份

    总之,使用Java调用Oracle存储过程进行数据库备份是一种常见的实践,它允许我们在应用程序中灵活地管理复杂的数据库操作,同时确保数据的安全性。结合适当的备份策略和工具,可以构建出高效可靠的数据库备份系统。

    Java调用oracle存储过程通过游标返回临时表

    在Java编程中,与Oracle数据库交互是常见的任务之一,尤其是当需要执行复杂的SQL操作或存储过程时。本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle...

    Java调用oracle存储过程总结

    本文将全面总结如何使用Java与Oracle存储过程进行交互。 首先,理解Oracle存储过程的基本概念。存储过程是预编译的SQL语句集合,存储在数据库中,可以接受参数、执行一系列操作并返回结果。它们提高了性能,减少了...

    oracle 存储过程 例子java 调用过程

    本文将深入探讨Oracle存储过程的创建、使用以及如何通过Java应用程序进行调用。 首先,我们来看一下如何在Oracle中创建存储过程。存储过程由`CREATE PROCEDURE`语句定义,其基本结构如下: ```sql CREATE OR ...

    存储过程调用java程序

    本文将围绕“存储过程调用Java程序”这一主题,探讨如何在数据库层与应用层之间进行交互。 首先,理解存储过程调用Java程序的基本原理是至关重要的。这通常通过以下两种方式实现: 1. **Java调用存储过程**:在...

    Oracle存储过程调用bat批处理脚本程序

    首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行特定的任务。它们提高了性能,降低了网络流量,并简化了数据库管理。在存储过程中调用外部脚本可以扩展Oracle的功能,比如自动化...

    java调用Oracle存储过程

    本文将深入探讨如何使用Java与Oracle数据库进行交互,并调用存储过程。 首先,确保你已经在你的开发环境中安装了Oracle JDBC驱动,通常为ojdbc.jar。这个驱动允许Java应用程序连接到Oracle数据库并执行SQL语句以及...

    jdbc连接oracle,执行存储过程,带数据库存储过程

    在IT行业中,数据库操作是必不可少的一部分,特别是在Java开发中,我们经常使用JDBC(Java Database Connectivity)来与各种数据库进行交互,包括Oracle。本篇将详细介绍如何使用JDBC连接Oracle数据库并执行存储过程...

    JAVA调用ORACLE存储过程

    ### JAVA调用ORACLE存储过程知识点详解 #### 一、背景与概述 在现代软件开发过程中,集成多种技术栈是常态。特别是在企业级应用中,Java 和 Oracle 数据库的组合非常常见。通过 Java 调用 Oracle 存储过程不仅能够...

    Oracle 存储过程JAVA调用存储过程 游标使用

    这篇博客可能详细讨论了如何在Java中与Oracle存储过程交互,特别是涉及到了游标的使用。 首先,让我们理解存储过程的概念。存储过程是一组预先编译的SQL语句,可以接受参数,执行复杂操作,然后返回结果。在Oracle...

    oracle存储过程返回多行多列的结构化数组,java调用并解析

    总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...

Global site tag (gtag.js) - Google Analytics