`

Java调用Oracle存储过程

阅读更多
创建需要的测试表:create table Test(tid varchar2(10),tname varchar2(10));

  第一种情况:无返回值

      create or replace procedure test_a(param1 in varchar2,param2 in varchar2) as

       begin                                                                               

            insert into test value(param1,param2);

     end;

    Java调用代码:

package com.test;

import java.sql.*;

import java.io.*;

import java.sql.*;

public class TestProcA

{

   public TestProcA(){

 

   }

  

   public static void main(String []args)

   {

       

        ResultSet rs = null;

        Connection conn = null;

        CallableStatement proc = null;

        

        try{

          Class.forName("oracle.jdbc.driver.OracleDriver");

          conn =  DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test", "test", "test");

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

          proc.setString(1, "1001");

          proc.setString(2, "TestA");

          proc.execute();

        }catch(Exception e){

     e.printStackTrace();

}finally{

           try{

       if(null!=rs){

                 rs.close();

          if(null!=proc){

                    proc.close();

          }

          if(null!=conn){

                    conn.close();

          }

       } 

           }catch(Exception ex){

           }

        }

   }

}

第二种情况:有返回值的存储过程(返回值非列表).

存储过程为:

create or replace procedure test_b(param1 in varchar2,param2 out varchar2)

as

begin

    select tname into param2 from test where tid=param1;

end;

Java调用代码:

package com.test;

import java.sql.*;

import java.io.*;

import java.sql.*;

public class TestProcB

{

   public TestProcB(){

 

   }

  

   public static void main(String []args)

   {

       

        Connection conn = null;

        CallableStatement proc = null;

      

        try{

          Class.forName("oracle.jdbc.driver.OracleDriver");

          conn =  DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test", "test", "test");

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

          proc.setString(1, "1001");

          proc.registerOutParameter(2, Types.VARCHAR);

          proc.execute();

   System.out.println("Output is:"+proc.getString(2));

        }catch(Exception e){

     e.printStackTrace();

}finally{

           try{

          if(null!=proc){

                    proc.close();

          }

          if(null!=conn){

                    conn.close();

          }



           }catch(Exception ex){

           }

        }

   }

}

第三种情况:返回列表.

由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.要分两部分来写:

create or replace package tpackage as

type t_cursor is ref cursor;

procedure test_c(c_ref out t_cursor);

end ;

create or replace package body tpackage as

procedure test_c(c_ref out t_cursor) is

   begin

      open c_ref for select * from test;

  end test_c;

end tpackage;

Java调用代码:

package com.test;

import java.sql.*;

import java.io.*;

import java.sql.*;

public class TestProcB

{

   public TestProcB(){

 

   }

  

   public static void main(String []args)

   {

       

        Connection conn = null;

        CallableStatement proc = null;

        ResultSet rs =  null;

        try{

          Class.forName("oracle.jdbc.driver.OracleDriver");

          conn =  DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test", "test", "test");

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

          

          proc.registerOutParameter(1,OracleTypes.CURSOR);

          proc.execute();

          while(rs.next()){

              System.out.println(rs.getObject(1)+"\t"+rs.getObject(2));

          }

        }catch(Exception e){

     e.printStackTrace();

}finally{

           try{

          if(null!=rs){

              rs.close();

             if(null!=proc){

                    proc.close();

             }

             if(null!=conn){

                    conn.close();

             }

          }

          }catch(Exception ex){

           }

        }

   }

}

分享到:
评论

相关推荐

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...

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

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    java调用oracle存储过程或者函数

    以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。

    JAVA调用ORACLE存储过程

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

    java调用oracle存储过程(游标)相关

    总之,Java调用Oracle存储过程,尤其是处理游标,需要理解JDBC的使用、Oracle特定的类型以及存储过程的参数传递方式。通过合理的编程实践,我们可以高效地在Java应用程序中集成Oracle数据库的复杂操作。

    java调用Oracle存储过程的代码

    总结,通过Java调用Oracle存储过程,我们需要配置JDBC驱动,建立数据库连接,创建CallableStatement,设置参数,执行存储过程,并处理返回的结果。在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的...

    java调用oracle存储过程

    ### Java调用Oracle存储过程详解 #### 一、概述 在企业级应用开发中,数据库存储过程被广泛用于实现复杂的业务逻辑处理。由于其高效性和安全性,存储过程常常成为首选方案之一。Java作为主流的企业级开发语言之一...

    用java调用oracle存储过程

    以上代码展示了如何在Java中调用Oracle数据库的三种类型的存储过程:无返回值的存储过程、有单个返回值的存储过程以及返回列表的存储过程。对于无返回值的存储过程,主要涉及的是参数的输入,通过`execute()`方法...

    java调用oracle存储过程.wps

    java调用oracle存储过程.wps java调用oracle存储过程.wps java调用oracle存储过程.wps

    java 调用oracle存储过程

    总之,Java调用Oracle存储过程涉及的主要知识点包括JDBC API、Oracle JDBC驱动、`CallableStatement`对象、参数绑定、结果集处理以及资源管理。通过学习和实践这些内容,开发者可以有效地在Java应用中集成Oracle...

    java调用oracle存储过程入门实例 增删改查

    在Java中调用Oracle存储过程,我们需要使用JDBC(Java Database Connectivity),这是Java标准库提供的一组接口和类,用于与各种数据库进行通信。首先,我们需要添加Oracle JDBC驱动到项目中,例如ojdbc.jar。 1. *...

    JAVA调用ORACLE存储过程通用类

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

    Java调用Oracle存储过程的方法

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

Global site tag (gtag.js) - Google Analytics