`

java 调用oracle存储过程 (带out parameter)

 
阅读更多

备注:

    1、写存储过程时,注意commit提交;

    2、oracle默认转义字符为单引号‘;

    3、存储过程带参数时,注意要把out类型的写在前面,否则,可能报错(用游标类型就会报错);

    4、调用函数和调用存储过程类似,也要cs.registerOutParameter(1, java.sql.Types.VARCHAR);

 

 

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

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

补充说明:要注意的是这个存储过程存在一个(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
    --此处可以使用临时表将统计数据存入临时表TB,然后在select from 临时表TB
     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数据库的结合非常常见。为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来...

    Springboot调用Oracle存储过程的几种方式.docx

    在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...

    Spring boot调用Oracle存储过程的两种方式及完整代码

    Spring Boot 调用 Oracle 存储过程的两种方式及完整代码 在本文中,我们将为大家介绍 Spring Boot 调用 Oracle 存储过程的两种方式,并提供完整的代码示例。本文主要解决了在 Spring Boot 项目中调用 Oracle 存储...

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

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

    oracle存储过程教程

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

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

    本文将详细解析如何通过Java调用Oracle存储过程,包括无返回值和有返回值的情况。 首先,我们需要了解存储过程的基本概念。存储过程是预编译在数据库端的一组SQL语句,可以接受输入参数,执行特定操作,并可能返回...

    Oracle存储过程、触发器

    Oracle存储过程是一组预编译的SQL和PL/SQL语句,存储在数据库服务器上,可以按需调用执行。它们提供了封装和重用代码的能力,提高了性能,并减少了网络流量。创建存储过程的基本语法如下: ```sql CREATE OR ...

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

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

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

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

    java调用存储过程示例

    以下是一个简单的Java调用存储过程的示例代码: ```java import java.sql.*; public class ProcedureTest { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testDB"; ...

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

    以上就是使用Java调用存储过程的基本步骤。注意,这个例子是基于Oracle数据库的,不同的数据库可能有不同的语法和数据类型。如果你使用其他数据库(如MySQL、SQL Server),请查阅相应的JDBC驱动文档,了解特定的...

    oracle存储过程学习经典

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

    IBATIS调用存储过程

    本文将详细探讨如何使用iBATIS调用Oracle存储过程,并处理返回的Cursor结果集。 首先,理解iBATIS调用存储过程的基本原理。iBATIS允许开发者在映射文件中定义存储过程调用,通过`<procedure>`标签来实现。在这个...

    oracle存储过程学习经典入门.doc

    **用Java调用Oracle存储过程** 1. **无返回值的存储过程** 调用时通常使用`CallableStatement`,设置SQL语句为`{call procedure_name(?, ?)}`,然后设置参数并执行。 2. **有返回值的存储过程(非列表)** 如果...

    oracle 存储过程(6)

    本文将深入探讨Oracle存储过程的创建、调用以及其优势。 一、存储过程的创建 在Oracle中,我们可以使用`CREATE PROCEDURE`语句来创建存储过程。基本语法如下: ```sql CREATE OR REPLACE PROCEDURE procedure_name...

    存储过程

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

    Oracle存储过程

    在本文中,我们将深入探讨Oracle存储过程的定义、创建、调用以及其在实际应用中的重要性。 一、存储过程的定义与分类 存储过程是由一个或多个SQL语句和PL/SQL块组成的集合,它们被存储在数据库中并可由用户或应用...

    Oracle_的存储过程及游标

    Oracle的存储过程是数据库中一组预编译的SQL语句,它们封装在一起,形成一个可重用的单元,便于执行复杂的业务逻辑。存储过程可以接受输入参数,也可以返回结果,但不同于函数,它不需要返回一个特定的值。在Oracle...

    Hibernate存储过程的调用

    通过以上步骤,我们可以利用Hibernate框架高效地调用Oracle数据库中的存储过程。这种方法不仅提高了系统的性能,还简化了复杂业务逻辑的处理,为开发者提供了更加灵活的编程方式。在未来开发过程中,可以进一步探索...

    ibatis调存储过程返回游标

    <parameter property="backcursor" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" resultMap="backmap"/> ``` 然后,在`procedure`元素中引用这个`parameterMap`: ```xml {call user_...

Global site tag (gtag.js) - Google Analytics