`

JAVA中调用Oracle存储过程

    博客分类:
  • J2SE
阅读更多
/**
数据库表
CREATE TABLE TB_MONITOR (
   ID                   NUMBER(20)                      NOT NULL,
   MONITOR_OBJECT_CODE CHAR(10),
   MONITOR_OBJECT_NAME VARCHAR2(180),
   BRANCH_CODE          CHAR(10),
   SYSTEM_CODE          CHAR(10),
   DIREC_NAME           VARCHAR2(180),
   FILE_NUM             NUMBER,
   STATUS               CHAR(10),
   BEGIN_TIME           TIMESTAMP,
   END_TIME             TIMESTAMP,
   DATA_TIME            TIMESTAMP,
   MONITOR_TIME         TIMESTAMP,
   REMARK               VARCHAR2(180),
   CONSTRAINT PK_TB_MONITOR PRIMARY KEY (ID)
);
*/
public class OracleProcedureCall {

private static String driver = "oracle.jdbc.driver.OracleDriver";
private static String strUrl = "jdbc:oracle:thin:@192.168.1.90:1521:odsdb";
private static String userName = "odsdb";
private static String password = "ods";

private static Connection conn = null;

//获得数据库连接
public static Connection getConnection(){
   try{
    if(conn == null){
     Class.forName(driver);
     conn = DriverManager.getConnection(strUrl, userName, password);
    }
   }catch(ClassNotFoundException e){
    e.printStackTrace();
   }catch(SQLException e){
    e.printStackTrace();
   }

     return conn;
}

/*无返回值的存储过程
CREATE OR REPLACE PROCEDURE AddMonInfo
( 
n_id tb_monitor.id%TYPE, 
n_oc tb_monitor.monitor_object_code%TYPE, 
n_on tb_monitor.monitor_object_name%TYPE, 
n_bc tb_monitor.branch_code%TYPE,
n_sc tb_monitor.system_code%TYPE,
n_fn tb_monitor.file_num%TYPE,
n_st tb_monitor.status%TYPE,
n_rk tb_monitor.remark%TYPE
) 
AS 
BEGIN 
--向表中插入数据 
INSERT INTO tb_monitor(id,monitor_object_code,monitor_object_name,branch_code,system_code,file_num,status,remark) 
VALUES(n_id,n_oc,n_on,n_bc,n_sc,n_fn,n_st,n_rk); 
END AddMonInfo; 
*/
public void testInsert(){
     try {
     CallableStatement proc = getConnection().prepareCall("{ call odsdb.AddMonInfo(?,?,?,?,?,?,?,?) }");
     proc.setString(1, "100");
     proc.setString(2, "o_code");
     proc.setString(3, "o_name");
     proc.setString(4, "b_code");
     proc.setString(5, "s_code");
     proc.setString(6, "1");
     proc.setString(7, "status");
     proc.setString(8, "remark");
       
     proc.execute();
     }
     catch (SQLException ex2) {
     ex2.printStackTrace();
     }
     catch (Exception ex2) {
     ex2.printStackTrace();
     }
     finally{
     try {
        if(conn!=null){
         conn.close();
           }
     }
     catch (SQLException ex1) {
     }
     }
}

/*有返回值的存储过程(非列表)
CREATE OR REPLACE PROCEDURE QueryMonInfo
(
   n_id IN tb_monitor.id%TYPE, 
   n_oc OUT VARCHAR2, 
   n_on OUT VARCHAR2
) AS
BEGIN 
    SELECT monitor_object_code, monitor_object_name into n_oc,n_on FROM tb_monitor WHERE ID= n_id; 
END QueryMonInfo;
*/
public String[] testQueryArray(){

   String[] resultArr = null;

   try {
    CallableStatement proc = getConnection().prepareCall("{ call odsdb.QueryMonInfo(?,?,?) }");
    proc.setInt(1, 100);
    proc.registerOutParameter(2, Types.VARCHAR);
    proc.registerOutParameter(3, Types.VARCHAR);
    proc.execute();
      
    resultArr = new String[2];
    resultArr[0] = proc.getString(2);
    resultArr[1] = proc.getString(3);
    System.out.println("=code=is= "+resultArr[0]);
    System.out.println("=name=is= "+resultArr[1]);
   }
   catch (SQLException ex2) {
    ex2.printStackTrace();
   }
   catch (Exception ex2) {
    ex2.printStackTrace();
   }
   finally{
    try {
     if(conn!=null){
      conn.close();
     }
    }
    catch (SQLException ex1) {
     ex1.printStackTrace();
    }
   }
   return resultArr;
}

/*返回列表,需要使用package方式
先创建Package
CREATE OR REPLACE PACKAGE TESTPACKAGE AS TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
然后创建procedure
CREATE OR REPLACE PROCEDURE QueryMonResultSet(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS 
BEGIN
     OPEN p_CURSOR FOR SELECT * FROM tb_monitor;
END QueryMonResultSet;
*/
public ResultSet testQueryResultSet(){

   ResultSet rs = null;

     try {
     CallableStatement proc = getConnection().prepareCall("{ call odsdb.QueryMonResultSet(?) }");
     proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
     proc.execute();
     rs = (ResultSet)proc.getObject(1);

     while(rs.next()) {
        System.out.println("ID:" + rs.getString(1) + "\tCODE:"+rs.getString(2)+"");
     }
     }
     catch (SQLException ex2) {
     ex2.printStackTrace();
     }
     catch (Exception ex2) {
     ex2.printStackTrace();
     }
     finally{
     try {
        if(rs != null){
         rs.close();
         if(conn!=null){
          conn.close();
         }
        }
     }
     catch (SQLException ex1) {
     }
     }
   return rs;
}

public static void main(String[] args){
   OracleProcedureCall call = new OracleProcedureCall();
   call.testQueryResultSet();
}
}



//----2222222222222222------------------------------------------------------------------------------------------------------------------

import java.sql.*;

public class n {
public static void main(String args [])
{
   Connection myConnection = null; //与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果
   Statement myStatement = null; //用于执行静态 SQL 语句并返回它所生成结果的对象
   CallableStatement cs;
   try
   {
    DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); //管理一组 JDBC 驱动程序的基本服务并向 DriverManager 注册给定驱动程序
    myConnection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "hr", "hr"); // 试图建立到给定数据库 URL 的连接
    //myConnection.setAutoCommit(false); //将此连接的自动提交模式设置为给定状态
    cs = myConnection.prepareCall("{call sencond(?)}");

                       cs.registerOutParameter(1, Types.VARCHAR);
                        //cs.registerOutParameter(2, Types.VARCHAR);

                        cs.execute();

                        String retValue = cs.getString(1);
                         System.out.println(retValue);

      }
   catch(SQLException e)
   {
    System.out.println("Error code = " + e.getErrorCode());
    System.out.println("Error message = " + e.getMessage());
    System.out.println("Error state = " + e.getSQLState());
   }
   finally
   {
    try
    {
     if (myStatement != null)
     {
      myStatement.close(); //立即释放此 Statement 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作
     }
     if (myConnection != null)
     {
      myConnection.close(); //立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放
     }
    }
    catch(SQLException e)
    {
     e.printStackTrace();
    }
   }
}
}

核心部分:

CallableStatement cs;
cs = myConnection.prepareCall("{call sencond(?,?)}");

                       cs.registerOutParameter(1, Types.VARCHAR); //out
                        cs.setString(2, "a string");      //in

                        cs.execute();   //run

                        String retValue = cs.getString(1);
                         System.out.println(retValue);

过程如下:

create or replace procedure

sencond(name out varchar2,search in varchar2)

as

begin

select name from emp where name=search;

end;


分享到:
评论

相关推荐

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

    Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中,需要创建两个Type类型:`myScalarType`和`myTableType...

    JAVA调用ORACLE存储过程

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

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

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

    java调用Oracle存储过程的代码

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

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

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

    java调用oracle存储过程

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

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

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

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

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

    用java调用oracle存储过程

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

    java 调用oracle存储过程

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

    java调用oracle存储过程.wps

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

    JAVA调用ORACLE存储过程通用类

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

    Java调用Oracle存储过程的方法

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

    java调用Oracle存储过程

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java与...记住,实践是最好的老师,尝试编写一个简单的Java程序来调用Oracle存储过程,加深理解。

    Java调用oracle存储过程总结

    通过这些步骤,你可以成功地从Java应用程序中调用Oracle存储过程。确保正确配置JDBC驱动,理解存储过程的参数类型,并熟悉JDBC API,这样就能高效地实现数据交互了。在开发过程中,可以参考Oracle的官方文档以及各种...

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

    总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用这些存储过程。 Oracle 存储过程 首先,我们编写了两个 Oracle 存储过程:`P_EMP_SELECT` 和 `P_EMP_ADD`。 `P_EMP_SELECT` ...

Global site tag (gtag.js) - Google Analytics