`

java编写Oracle存储过程

阅读更多

      Oracle里可以使用多种语言来编写存储过程,比如Pro*C/C++,PL/SQL,COBOL,在Oracle8i开始支持用Java编写存储过程。用pl/sql写存储过程对很多人来说时比较陌生的,用自己熟悉的语言处理起来也比较方便。

      用到用java编写存储过程,网络上的一些资料有些乱,在这简单的整理下使用过程,和注意的地方。

 

Java存储过程与一般的JDBC程序有所不同的

  • 有安全限制,毕竟是在oracle内部运行的,不允许访问操作系统的资源,如文件。
  • 获取数据库联接方式,connection = new OracleDriver().defaultConnection();
  • 或则Connection conn = DriverManager.getConnection("jdbc:default:connection:");
  • System.out,System.err,System.in等输入输出有所不同。可以利用某些命令重定向。
  •  

    下面是一个简单的例子

    第一步:在plsqldeveloper里,java source里增加一个TestJava1类,也可以直接从IDE中拷贝过来

     

    create or replace and compile java source named HelloJava as
    
    import oracle.jdbc.OracleDriver;
    
    public class HelloJava{
      public static void test(int m,float){
         //Connection conn    = new OracleDriver().defaultConnection();
         // 或则Connection conn = DriverManager.getConnection("jdbc:default:connection:");
         //其它部分和一般的JDBC程序一样就可以了
       System.out.println("Hello");
      }
    }

     执行它,以保存并编译

     

    第二步:增加一个procedure,在command window里执行如下命令:

    create or replace procedure myTest(n number,m float)
          as language java 
    name 'HelloJava.test(int,float)';

      注意:必须写成float,不能写成java.lang.Float,String型应该写成java.lang.String

    第三步:在command window里输入

    SET SERVEROUTPUT ON;   
    CALL dbms_java.set_output(2000); 

     以使System.out重定向到当前窗口;

    第四步:

        在command window里输入,exec myTest(1,1.0); 
        即可看到结果:

        Hello

     

    ==============================分隔线===========================================

    以下转载自:WPS2000的窝的博客

    地址:http://hi.baidu.com/zhangsilly/blog/item/fa513438c731b62b96ddd8a4.html

    这段时间一直是在和存储过程打交到,PL/SQL很好好强大,但Java其实也不慢(比起PHP)

    Java编写存储过程
    获取连接 (Class.forname 可以省掉了)
           Connection conn    = new OracleDriver().defaultConnection();
           或者
           Connection conn = DriverManager.getConnection("jdbc:default:connection:");

    其它部分和一般的JDBC程序一样就可以了

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import oracle.jdbc.OracleDriver;
    /**
     *@author Zhangxinling
     */
    public class PorcedureSample{
              public static void sample(long number) throws SQLException{
                   Connection conn = new OracleDriver().defaultConnection();
                   conn.setAutoCommit(false);
                   PreparedStatement ptmt 
                                     = conn.prepareStatement("INSERT INTO test values(??)");
                   for(long i=0L;i<number;i++){
                        stmt.setLong(1,i);
                        stmt.setString(2,"Zhangxinling@kingsoft.com");
                        stmt.executeUpdate();
                   }
                   stmt.close();
              }
    }
     



    部署:
          将编写好的Java源代码拷贝到服务器上(我本地是 JDK 1.6 u 12 的,编译的在Oracle 1.42 的JDK上一般来说是运行不了的,不过没试过直接使用编译好的 .class 文件),使用 oracle 自带的 jdk 编译:

           E:\oracle\product\10.2.0\db_1\jdk\bin\javac -classpath E:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar PorcedureSample.java

          打开 em(Enterprise Manager) ,点击 Schema 下的 Java Classes ,点击 Load Java 按钮, Schema 选择你要挂的Schema,这里我选择 TEST
    Schema ,看看刚刚的那个 Class 状态是否是 Valid ,不是的话多compile几次

    建存储过程:

          然后 Search 这个



    测试:
    速度还是飞快的(上例速度约是 PL/SQL的 1/3):

    ==============================================================================

    测试代码,参数均为 100000(10w),调用2次:
    Java版:8.64秒、8.069秒
    PL/SQL版:3.219秒、3.094秒

    (以上结果来自于一台默认安装的 Windows XP 机器,未做任何优化)

     

    分享到:
    评论

    相关推荐

      使用Java编写Oracle存储过程.pdf

      在介绍使用Java编写Oracle存储过程之前,我们首先需要了解存储过程的基本概念以及使用它们的好处。存储过程是存储在数据库中的一段预编译和优化过的代码,可以包含复杂的业务逻辑。它们在第一次执行后被编译并存储在...

      java 与 oracle 存储过程

      Oracle存储过程是一种在数据库服务器端编写的程序,可以包含一系列SQL语句和控制流语句,提高了数据操作的效率和安全性。Java则作为后端开发的主要语言,通过JDBC(Java Database Connectivity)接口与Oracle数据库...

      java编写oracle的存储过程,为什么调用System.in阻塞IO时不起作用?还报错?

      在Java编程中,Oracle存储过程的调用与标准输入(System.in)的交互可能会遇到一些问题,特别是当尝试使用System.in进行阻塞IO操作时。这个问题通常涉及到Java的多线程概念、I/O流的处理以及Oracle存储过程的执行...

      用Java编写Oracle数据库存储过程

      现在,我们可以基于Java存根创建一个Oracle存储过程: ```sql CREATE OR REPLACE PROCEDURE call_java_hello ( out_message OUT VARCHAR2 ) AS LANGUAGE JAVA NAME 'HelloWorld.sayHello() return java.lang.String...

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

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

      JAVA-ORACLE存储过程

      `ORACLE存储过程.txt`可能包含了存储过程的创建和使用示例,可以帮助读者理解存储过程的编写和功能。至于`dbman`,可能是数据库管理工具,用于创建、修改或查看数据库对象,包括存储过程。 学习这部分内容对于Java...

      java调用Oracle存储过程

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

      java Oracle存储过程分页整理

      本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本概念。分页是将大结果集分割成多个小部分,每次只加载一部分数据到内存中,这样可以减少内存消耗,提高响应速度。在...

      java调用oracle存储过程实现增删改查

      本文将详细介绍如何在Java中实现对Oracle存储过程的调用,以执行增删改查(CRUD)操作。 首先,确保你已安装了Oracle JDBC驱动(如ojdbc.jar),并将它添加到Java项目的类路径中。Oracle JDBC驱动提供了与Oracle...

      用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

      存储过程可以由多种语言编写,例如 PL/SQL、Java 等。存储过程可以封装复杂的业务逻辑,提高数据库的安全性和性能。 二、CallabledStatement 介绍 CallabledStatement 是 Java 中的一种接口,用于调用存储过程。...

      java调用oracle存储过程并得到结果集

      在MyEclipse中,你可以创建一个Java项目,编写以上代码,并运行它来测试对Oracle存储过程的调用。记得根据实际的数据库配置和存储过程名称进行调整。 通过这种方式,Java开发者可以有效地利用Oracle数据库的强大...

      项目里用到用java写oracle的存储过程,做个备份

      本项目中,我们将探讨如何利用Java来编写Oracle存储过程,以实现数据库的备份功能。 首先,Oracle存储过程是一种预编译的SQL和PL/SQL代码集合,可以执行特定任务,如数据处理、业务逻辑等。通过Java调用存储过程,...

      springboot整合mybatis调用oracle存储过程

      本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...

      oracle存储过程教程

      Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写包含一系列SQL语句和PL/SQL块的程序单元,这些程序单元可以在需要时执行,提高了数据处理的效率和应用程序的性能。在Java开发中,Oracle...

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

      在Java应用程序中调用Oracle存储过程是一种常见的数据访问方式,它能够利用数据库的强大功能,同时保持应用程序的结构清晰。这篇博客可能详细讨论了如何在Java中与Oracle存储过程交互,特别是涉及到了游标的使用。 ...

      dba.rar_closelyq1i_diehbl_java_oracle_oracle 存储过程

      Oracle存储过程是数据库管理系统中的一种重要功能,它允许程序员或DBA编写一组SQL语句和PL/SQL代码,然后以单个对象的形式存储在数据库中。这样,这些过程可以被多次调用,减少了网络流量,提高了性能,并且使得代码...

    Global site tag (gtag.js) - Google Analytics