`

Linux下Oracle存储过程调用Java程序(含外部包)

 
阅读更多

一、描述:

用Java编写了一个导入Excel数据到数据库中的程序,不过,该Java程序需要在Oracle数据库中通过存储过程的调用来执行。其中,Java程序还引用了外部包poi.jar和jdbc.jar。

二、假设:

按照
http://overloving.iteye.com/blog/1589185 中的描述安装JDK和相关环境变量设置。编写的Java程序的名称为ExcelOperate.java。Oracle数据库中编写的的存储过程名称为TestProcJava。并且Java程序编译好:ExcelOperate.class。

三、步骤:

1) 在Linux系统中创建一个目录用来存放本操作需要用到的文件:

    [root@dbserv ~]# mkdir /sunjava

2) 在Linux系统中将Java程序的ExcelOperate.class文件、poi.jar、ojdbc.jar放到sunjava目录下:

    [root@dbserv ~]# cp /home/oracle/ExcelOperate.class /sunjava

    [root@dbserv ~]# cp /home/oracle/poi.jar /sunjava

    [root@dbserv ~]# cp /home/oracle/jdbc.jar /sunjava


3) 在Linux系统中配置Java相关环境变量:

    用gedit 打开配置文件profile文件:

    [root@dbserv ~]# gedit /etc/profile

    在配置文件的最后添加(或者存在的情况下修改)如下代码:

    export JAVA_HOME=/usr/java/ jdk1.6.0_32

    exprot JAVA_BIN=/usr/java/ jdk1.6.0_32 /bin

    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/sunjava/poi.jar:/sunjava/jdbc.jar/:/sunjava/

    export PATH=$JAVA_HOME/bin:$PATH

    export JAVA_HOME JAVA_BIN CLASSPATH PATH


    说明:在CLASSPATH增加了外部包所在的位置;最好将.class文件所在的路径也添加进去。


4)将引用的外部包jar文件复制到Oracle 的"$ORACLE_HOME/sqlj/lib"目录中:

    [root@dbserv sunjava] cp poi.jar $ORACLE_HOME/sqlj/lib

    [root@dbserv sunjava] cp jdbc .jar $ORACLE_HOME/sqlj/lib

4)进入
Oracle 的"$ORACLE_HOME/sqlj/lib"目录中, 通过 loadjava命令,将调用的外部包放到Oracle数据库中:
    # 10gR2
    loadjava -u sys/password -r -v -f -genmissing -s -grant public demo1.jar demo2.jar
    # 11g
    loadjava -u sys/password -r -v -f -genmissing -s -grant public demo1.jar demo2.jar


    [root@dbserv lib] loadjava -u apps/apps -r -v -f -genmissing -s -grant public poi.jar jdbc.jar


5)在Oracle数据库中:


    --创建数据库中的目录(将.class文件所在的物理目录映射到数据库中的目录)
    CREATE OR REPLACE DIRECTORY test_dir AS '/sunjava';


    --
创建数据库中的Java class (将需要调用的Java class文件 映射到数据库中的Java Class)
    CREATE OR REPLACE JAVA CLASS USING     BFILE(test_dir,'ExcelOperate.class');


    --检查是否创建成功
    SELECT a.OBJECT_NAME, a.OBJECT_TYPE,a.status FROM user_objects a WHERE a.OBJECT_NAME LIKE '%ExcelOperate%';


   
--创建调用Java程序的存储过程
    CREATE OR REPLACE PROCEDURE test_java AS LANGUAGE JAVA
 NAME 'ExcelOperate.main(java.lang.String[])';


   
--设置输出
    SET SERVEROUTPUT ON SIZE 5000;
    CALL DBMS_JAVA.SET_OUTPUT(5000);


   
--执行存储过程
    EXECUTE test_java;

分享到:
评论
2 楼 overloving 2012-12-25  
fangjindan 写道
  

这个是绝对可行的哈,我测试通过老的
1 楼 fangjindan 2012-12-24  
  

相关推荐

    java开源包4

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包1

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包8

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包11

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包6

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包9

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包101

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包5

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包10

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包3

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包2

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    java开源包7

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    Java资源包01

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    java 面试题 总结

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...

    超级有影响力霸气的Java面试题大全文档

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    在数据库处理方面,不需要在数据层借助存储过程及数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQL[6]。 该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下: 1. ...

Global site tag (gtag.js) - Google Analytics