`

java下实现调用oracle的存储过程和函数

阅读更多
在oracle下创建一个test的账户,然后

1.创建表:STOCK_PRICES
[cpp] view plaincopy
--创建表格 
CREATE TABLE STOCK_PRICES( 
    RIC VARCHAR(6) PRIMARY KEY, 
    PRICE NUMBER(7,2), 
    UPDATED DATE ); 
2.插入测试数据:
[sql] view plaincopy
--插入数据 
INSERT INTO stock_prices values('1111',1.0,SYSDATE); 
INSERT INTO stock_prices values('1112',2.0,SYSDATE); 
INSERT INTO stock_prices values('1113',3.0,SYSDATE); 
INSERT INTO stock_prices values('1114',4.0,SYSDATE); 
3.建立一个返回游标:
PKG_PUB_UTILS

[cpp] view plaincopy
--建立一个返回游标 
CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS 
    --动态游标 
    TYPE REFCURSOR IS REF CURSOR; 
END PKG_PUB_UTILS; 
4.创建和存储过程:P_GET_PRICE
[sql] view plaincopy
--创建存储过程 
CREATE OR REPLACE PROCEDURE P_GET_PRICE 

  AN_O_RET_CODE OUT NUMBER, 
  AC_O_RET_MSG  OUT VARCHAR2, 
  CUR_RET OUT PKG_PUB_UTILS.REFCURSOR, 
  AN_I_PRICE IN NUMBER 
)  
IS 
BEGIN 
    AN_O_RET_CODE := 0; 
    AC_O_RET_MSG  := '操作成功'; 
     
    OPEN CUR_RET FOR 
        SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE; 
EXCEPTION 
    WHEN OTHERS THEN 
        AN_O_RET_CODE := -1; 
        AC_O_RET_MSG  := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM; 
END P_GET_PRICE; 
5.创建函数:
[cpp] view plaincopy
--创建函数:F_GET_PRICE 
CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER) 
    RETURN PKG_PUB_UTILS.REFCURSOR 
AS 
    stock_cursor PKG_PUB_UTILS.REFCURSOR; 
BEGIN 
    OPEN stock_cursor FOR 
    SELECT * FROM stock_prices WHERE price < v_price; 
    RETURN stock_cursor; 
END; 
6.JAVA调用存储过程返回结果集
JDBCoracle10G_INVOKEPROCEDURE.java

[java] view plaincopy
import java.sql.*; 
import oracle.jdbc.OracleCallableStatement; 
import oracle.jdbc.OracleTypes; 
 
/* 本例是通过调用oracle的存储过程来返回结果集:
* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip
*/ 
public class JDBCoracle10G_INVOKEPROCEDURE { 
    Connection conn = null; 
    Statement statement = null; 
    ResultSet rs = null; 
    CallableStatement stmt = null; 
 
    String driver; 
    String url; 
    String user; 
    String pwd; 
    String sql; 
    String in_price; 
 
    public JDBCoracle10G_INVOKEPROCEDURE()  
    { 
        driver = "oracle.jdbc.driver.OracleDriver"; 
        url = "jdbc:oracle:thin:@localhost:1521:ORCL"; 
        // oracle 用户 
        user = "test"; 
        // oracle 密码 
        pwd = "test"; 
        init(); 
        // mysid:必须为要连接机器的sid名称,否则会包以下错: 
        // java.sql.SQLException: Io 异常: Connection 
        // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) 
        // 参考连接方式: 
        // Class.forName( "oracle.jdbc.driver.OracleDriver" ); 
        // cn = DriverManager.getConnection( 
        // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ); 
 
    } 
 
    public void init() { 
        System.out.println("oracle jdbc test"); 
        try { 
            Class.forName(driver); 
            System.out.println("driver is ok"); 
            conn = DriverManager.getConnection(url, user, pwd); 
            System.out.println("conection is ok"); 
            statement = conn.createStatement(); 
            // conn.setAutoCommit(false); 
            // 输入参数 
            in_price = "3.0"; 
            // 调用函数 
            stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)"); 
            stmt.registerOutParameter(1, java.sql.Types.FLOAT); 
            stmt.registerOutParameter(2, java.sql.Types.CHAR); 
            stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR); 
            stmt.setString(4, in_price); 
            stmt.executeUpdate(); 
            int retCode = stmt.getInt(1); 
            String retMsg = stmt.getString(2); 
            if (retCode == -1) { // 如果出错时,返回错误信息 
                System.out.println("报错!"); 
            } else { 
                // 取的结果集的方式一: 
                rs = ((OracleCallableStatement) stmt).getCursor(3); 
                // 取的结果集的方式二: 
                // rs = (ResultSet) stmt.getObject(3); 
                String ric; 
                String price; 
                String updated; 
                // 对结果进行输出 
                while (rs.next()) { 
                    ric = rs.getString(1); 
                    price = rs.getString(2); 
                    updated = rs.getString(3); 
                    System.out.println("ric:" + ric + ";-- price:" + price 
                            + "; --" + updated + "; "); 
                } 
            } 
 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally { 
            System.out.println("close "); 
        } 
    } 
 
    public static void main(String args[])// 自己替换[] 
    { 
        new JDBCoracle10G_INVOKEPROCEDURE(); 
    } 

7.开发JAVA调用函数返回结果集
JDBCoracle10G_INVOKEFUNCTION.java

[java] view plaincopy
import java.sql.*; 
import oracle.jdbc.OracleCallableStatement; 
import oracle.jdbc.OracleTypes; 
 
/*
/* 本例是通过调用oracle的函数来返回结果集:
* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip  
*/ 
public class JDBCoracle10G_INVOKEFUNCTION { 
    Connection conn = null; 
    Statement statement = null; 
    ResultSet rs = null; 
    CallableStatement stmt = null; 
 
    String driver; 
    String url; 
    String user; 
    String pwd; 
    String sql; 
    String in_price; 
 
    public JDBCoracle10G_INVOKEFUNCTION() 
    { 
        driver = "oracle.jdbc.driver.OracleDriver"; 
        url = "jdbc:oracle:thin:@localhost:1521:ORCL"; 
        // oracle 用户 
        user = "test"; 
        // oracle 密码 
        pwd = "test"; 
        init(); 
        // mysid:必须为要连接机器的sid名称,否则会包以下错: 
        // java.sql.SQLException: Io 异常: Connection 
        // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) 
        // 参考连接方式: 
        // Class.forName( "oracle.jdbc.driver.OracleDriver" ); 
        // cn = DriverManager.getConnection( 
        // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ); 
    } 
 
    public void init() { 
        System.out.println("oracle jdbc test"); 
        try { 
            Class.forName(driver); 
            System.out.println("driver is ok"); 
            conn = DriverManager.getConnection(url, user, pwd); 
            System.out.println("conection is ok"); 
            statement = conn.createStatement(); 
            // conn.setAutoCommit(false); 
            // 输入参数 
            in_price = "5.0"; 
            // 调用函数 
            stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}"); 
            // stmt.registerOutParameter(1, java.sql.Types.FLOAT); 
            // stmt.registerOutParameter(2, java.sql.Types.CHAR); 
            stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); 
            stmt.setString(2, in_price); 
            stmt.executeUpdate(); 
            // 取的结果集的方式一: 
            rs = ((OracleCallableStatement) stmt).getCursor(1); 
            // 取的结果集的方式二: 
            // rs = (ResultSet) stmt.getObject(1); 
            String ric; 
            String price; 
            String updated; 
 
            while (rs.next()) { 
                ric = rs.getString(1); 
                price = rs.getString(2); 
                updated = rs.getString(3); 
                System.out.println("ric:" + ric + ";-- price:" + price + "; --" 
                        + updated + "; "); 
            } 
 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally { 
            System.out.println("close "); 
        } 
    } 
 
    public static void main(String args[])// 自己替换[] 
    { 
        new JDBCoracle10G_INVOKEFUNCTION(); 
    } 

   http://blog.csdn.net/xw13106209/article/details/6905259
分享到:
评论

相关推荐

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

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

    java中调用oracle的存储过程和函数

    ### Java中调用Oracle的存储过程和函数 在Java应用程序中调用Oracle数据库中的存储过程或函数是一项常见的任务。这不仅能够提高代码的执行效率,还可以有效地管理事务处理,确保数据的一致性和完整性。本文将详细...

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

    本文介绍了Java调用Oracle存储过程返回结果集Record和Cursor的相关知识点,包括创建Type、PACKAGE和PROCEDURE,Java代码中调用存储过程,并获取结果集。这些知识点对深入了解Oracle存储过程和Java调用Oracle存储过程...

    hibernate query调用oracle存储过程

    总之,通过Hibernate的Query接口,我们可以方便地调用Oracle的存储过程和函数,实现复杂的业务逻辑。结合源码和数据库文件,开发者可以更好地理解和应用这些知识。在实际开发中,一定要根据项目需求灵活运用,并遵循...

    Java调用Oracle的过程和函数

    ### Java调用Oracle的过程和函数 在现代软件开发过程中,Java与Oracle数据库的结合非常常见。为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来...

    java调用Oracle存储过程

    在Java中调用存储过程主要通过`CallableStatement`接口实现,它是`PreparedStatement`的子接口,专用于调用存储过程和函数。 以下是一个基本的步骤来调用Oracle存储过程: 1. **建立数据库连接**: 使用`...

    Java调用Oracle存储过程的方法

    以上就是使用Java调用Oracle存储过程的方法,包括处理基本类型返回值和游标返回值。在实际开发中,可能还需要处理异常、事务管理等问题,确保代码的健壮性和可维护性。同时,为了提高性能,建议使用连接池管理数据库...

    JAVA 与ORACLE 存储过程及函数

    在“JAVA与存储过程.txt”文件中,可能包含了具体的示例代码,解释了如何在Java中调用Oracle存储过程和函数,以及如何处理输入和输出参数。这些示例可能涉及到了`Connection`, `PreparedStatement`, `ResultSet`等...

    java调用oracle存储过程

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

    oracle 存储过程 函数 dblink

    在这段Java代码中,我们使用了`CallableStatement`来调用Oracle存储过程`TESTA`。关键点包括: - `prepareCall`方法用于准备调用存储过程。 - 使用`setString`方法设置输入参数的值。 - 调用`execute`方法执行存储...

    Java调用Oracle的过程和函数.doc

    以上是Java调用Oracle数据库过程和函数的基本步骤和关键知识点。实际应用中,可能还需要考虑事务管理、性能优化(如批处理)、连接池等高级主题。理解这些概念和操作对于开发高效、可靠的Java数据库应用至关重要。

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

    本话题将详细探讨如何在Oracle存储过程中调用外部的批处理脚本,如Windows系统的BAT文件,以实现数据库操作与系统命令的集成。 首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行...

    java调用存储过程(含out参数)

    在Java编程中,调用数据库的存储过程是常见的任务,特别是在处理复杂的业务逻辑或需要高效数据操作时。本文将详细讲解如何在Java中调用含有`OUT`参数的存储过程,帮助开发者解决这类问题。 首先,理解存储过程的...

    java调用oracle分页存储过程

    Java调用Oracle分页存储过程是一项常见的数据库操作,尤其在处理大数据量时,为了提高查询效率和用户体验,分页查询显得尤为重要。Oracle数据库提供了一种高效的方法,即通过创建存储过程来实现分页功能,而Java作为...

    Java调用存储过程--传入集合参数

    通过本文的探讨,我们不仅了解了如何在Java中调用Oracle存储过程并传递集合参数的基本原理,还深入实践了相关的技术细节。这对于构建高性能、高可靠性的企业级应用而言,是不可或缺的知识点。在未来,随着数据量的...

    Java调用oracle函数返回oracle类(类似)集合

    3. **Java调用Oracle函数**: 在Java中,你需要使用Oracle的JDBC驱动(ojdbc.jar和nls_charset12.jar)来与Oracle数据库交互。首先,你需要加载Oracle驱动并建立数据库连接。然后,你可以通过`CallableStatement`来...

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

    ### Java调用Oracle与SQL Server存储过程的通用方法 #### 1. **建立数据库连接** 在Java中,使用JDBC(Java Database Connectivity)来连接数据库。根据`dbType`参数动态选择正确的数据源,即Oracle或SQL Server的...

    Mybatis调用Oracle存储过程的方法图文详解

    本文详细介绍了Mybatis调用Oracle存储过程的方法,包括无参数存储过程的调用,有参数存储过程的调用,和存储过程的结果集调用。这些方法可以帮助开发者更好地使用Mybatis和Oracle存储过程来实现复杂的业务逻辑操作。

    oracle存储过程学习经典

    5. **调用Oracle存储过程**:通过Java或Hibernate等工具调用Oracle存储过程,需要注意参数传递和结果集的处理。 #### 动态SQL与存储过程 在存储过程中执行动态SQL,有两种主要方式: 1. **本地动态SQL**:适用于...

Global site tag (gtag.js) - Google Analytics