`
sameseam
  • 浏览: 23199 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JDBC调用oracle存储过程(out parameter)

 
阅读更多

首先我们以一个简单的例子开始,在这个例子中,只存在一个返回值。存储过程如下

SQL> create or replace procedure lizhe (aa out varchar2)is
begin
select password into aa from passport where id='123111';
end lizhe;
/

补充说明:要注意的是这个存储过程存在一个(aa out varchar2)这样的标识,这是一个参数,out表示这是一个输出参数,在select语句中将password的值“into”到这个参数里


然后再java端:

public static void runProcedure(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.159:1521:TOPS","YAC3","YAC3");
java.sql.CallableStatement cs = con.prepareCall("{call lizhe(?)}");
cs.registerOutParameter(1, java.sql.Types.VARCHAR);
cs.execute();
System.out.print("value2:" + cs.getString(1)); //取出字符串——关键


} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


补充说明:cs.registerOutParameter(1, java.sql.Types.VARCHAR);
重点只有这一句

2.多个返回值的

SQL> CREATE OR REPLACE PACKAGE TESTPACKAGE AS

TYPE Test_CURSOR IS REF CURSOR;

end TESTPACKAGE;
/

Package created

SQL> CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS

BEGIN

OPEN p_CURSOR FOR 'SELECT * FROM TB';

END TESTC;
/

Procedure created


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

public TestProcedure() {

}

public static void main(String[] args ){

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

String strUrl = "jdbc:oracle:thin:@192.168.0.159:1521:tops";

Statement stmt = null;

ResultSet rs = null;

Connection conn = null;


try {

Class.forName(driver);

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


CallableStatement proc = null;

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

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

proc.executeQuery();

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


while(rs.next())

{

System.out.println(rs.getString("VALUE"));

}

}

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

}

}

}

}

分享到:
评论

相关推荐

    Java调用Oracle的过程和函数

    为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来调用Oracle数据库中的函数,并特别关注带有不同类型的输入(in)、输出(out)及输入输出(in/...

    oracle存储过程(语法实例).pdf

    Java可以通过JDBC调用Oracle存储过程,包括`CallableStatement`对象来执行过程并处理输入/输出参数。 9. **更新与权限保留** 使用`CREATE OR REPLACE PROCEDURE`语句更新存储过程时,原有执行权限不会丢失。 10....

    oracle存储过程教程

    接下来,我们来看如何在Oracle中定义、调用和删除存储过程。例如,创建一个简单的存储过程,其功能是将两个整数相加: ```sql CREATE PROCEDURE add_numbers (p_num1 NUMBER, p_num2 NUMBER, OUT_RESULT OUT NUMBER)...

    Oracle存储过程、触发器

    Java中的JDBC(Java Database Connectivity)API允许开发人员连接到Oracle数据库并调用存储过程。以下是一个简单的示例,展示了如何在Java中调用上面定义的`add_numbers`存储过程: ```java import java.sql.*; ...

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

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

    oracle存储过程学习经典语法+实例+调用.doc

    6. **Java调用Oracle存储过程**:可以通过JDBC的CallableStatement对象调用存储过程,根据返回值类型选择不同的调用方式。 **Java调用Oracle存储过程总结** 1. **无返回值的存储过程**:使用`CallableStatement....

    java调用oracle sqlserver存储过程共用方法

    本文将深入解析如何在Java环境中调用Oracle与SQL Server数据库的存储过程,实现跨数据库的通用性,以及如何通过一个共享方法来执行这一操作。 ### Oracle与SQL Server共用存储过程的原理 存储过程是一种预编译的...

    oracle存储过程学习经典[语法+实例+调用]

    对于Java开发者,可以使用JDBC的CallableStatement来调用Oracle存储过程。以下是三种常见情况的示例: 1. 无返回值的存储过程: ```java CallableStatement cs = connection.prepareCall("{call procedure_name(?, ...

    oracle存储过程学习经典

    6. 使用Hibernate或其他Java框架调用Oracle存储过程,需要了解对应的JDBC API或ORM框架的调用方法。 调用Oracle存储过程的方式有多种,以下是三种常见情况: - **无返回值的存储过程**:这类过程通常用于执行一些...

    编程之java调用存储过程.doc

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或大量数据操作时。本文将详细解析如何通过Java调用Oracle存储过程,包括无返回值和有返回值的情况。 首先,我们需要了解存储过程的...

    存储过程

    - **Java调用Oracle存储过程.docx**:这份文档应该会提供Java通过JDBC调用Oracle存储过程的实例和最佳实践。 - **sql存储过程教程.txt**:这个文本文件可能是一个全面的存储过程教程,涵盖多种数据库系统,包括SQL ...

    struts2+oracle过程调用

    为了调用Oracle过程,我们通常会在Action类中创建一个方法,该方法负责与数据库交互。 在Oracle数据库中,过程(Procedure)是一种存储的PL/SQL代码块,可以接受参数、执行操作并返回结果。它们可以被看作是数据库...

    java调用存储过程示例

    在Java编程中,调用数据库的存储过程是常见的任务,特别是在复杂的业务逻辑处理和数据操作时。本示例将深入探讨如何使用Java来调用存储过程,并处理返回的结果。存储过程是预编译的SQL语句集合,可以提高性能、安全...

    Java中如何调用存储过程的代码

    在Java编程中,调用数据库中的存储过程是常见的任务,特别是在需要执行复杂业务逻辑或批量操作时。存储过程是预编译的SQL语句集合,它们可以提高性能、封装复杂逻辑并提供更好的安全性。以下是一个详细的步骤,展示...

    oracle调用java包

    一、Oracle的Java存根(JDBC-JVM)集成 Oracle数据库内置了一个Java Virtual Machine (JVM),这使得它能够直接执行Java代码。通过Java存根(Java Stored Procedures, JSP),我们可以把Java方法封装为数据库过程,...

    Mybatis调用PostgreSQL存储过程实现数组入参传递

    在MyBatis中调用这个存储过程需要解决两个问题:一是如何将Java中的数组转换为适合存储过程调用的形式,二是如何配置MyBatis以正确执行存储过程。 首先,MyBatis提供了`TypeHandler`接口,用于处理Java类型到JDBC...

    利用存储过程分页,使用oracle数据库

    在Oracle数据库中,存储过程是预编译的SQL语句集合,它们封装了特定的数据库...在Java应用中,可以使用JDBC调用这些存储过程,结合JavaBean来处理和展示分页结果。确保正确处理连接和资源关闭,以防止潜在的资源泄露。

    oracle分页查询

    1. **Java**:使用JDBC可以调用Oracle存储过程。首先加载Oracle驱动,然后创建连接,通过CallableStatement设置参数并执行存储过程。例如: ```java import java.sql.*; public class OraclePagingExample { ...

    Oracle + jdbcTemplate + Spring + Java + Flex 实现分页

    在Java端,可以利用Spring框架整合jdbcTemplate来调用Oracle存储过程。这里主要涉及以下步骤: 1. **配置数据源**:在Spring的配置文件中定义数据源。 2. **定义DAO层**:在DAO层定义方法,用于调用存储过程。 3. *...

    My oracle笔记

    在本文中,我们将深入探讨Oracle管理员的基本技能、PL/SQL编程、在Java中调用Oracle以及如何对Oracle数据库中的表进行各种操作。 一、Oracle基本使用 1. 链接命令:连接到Oracle数据库最常用的是SQL*Plus工具,...

Global site tag (gtag.js) - Google Analytics