在ORACLE触发器里调用JAVA程序

因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据。

现将过程记录如下:

1。编写JAVA程序

[java] view plain copy

  1. public class Main {
  2. public static void modify(String statTime)
  3. {
  4. String datas = "/var/spool/cron/oracle";
  5. File data = new File(datas);
  6. StringBuffer backup = null;
  7. try {
  8. StringBuffer content = new StringBuffer();
  9. backup = new StringBuffer();
  10. BufferedReader san = new BufferedReader(new FileReader(data));
  11. String line = null;
  12. while((line=san.readLine())!=null)
  13. {
  14. backup.append(line);
  15. backup.append("/n");
  16. }
  17. content.append("15 ");
  18. content.append(statTime.trim());
  19. content.append(" * * * /home/oracle/task.sh");
  20. content.append("/n");
  21. content.append("13 ");
  22. content.append(statTime.trim());
  23. content.append("* * * /home/oracle/tj_task/task2.sh");
  24. content.append("/n");
  25. FileWriter writer = new FileWriter(data,false);
  26. writer.write(content.toString());
  27. writer.flush();
  28. } catch (FileNotFoundException e) {
  29. e.printStackTrace();
  30. } catch (IOException e) {
  31. try
  32. {
  33. FileWriter writer = new FileWriter(data,false);
  34. writer.write(backup.toString());
  35. writer.flush();
  36. }catch(Exception ex)
  37. {
  38. ex.printStackTrace();
  39. }
  40. }
  41. }
  42. }

注意,这里写JAVA程序不需要遵循标准的JAVA程序,一定要有main入口函数,相反,这里的函数一般不要取名为main,除非格式是标准的main 函数格式,刚开始的时候我就犯了这个错误,一直找不到原因,后来经CSDN上的人点拨后,才发现是我把上面函数名写成了main,后来换个名字就好了。还有,这个函数一定是要静态的。

2。把JAVA程序LOAD进oracle

在$ORACLE_HOME/bin目录下有个LOADJAVA命令,使用这个命令将刚写好的JAVA程序LOAD进数据库

loadjava -user test/[email protected] -o -v -f -r Main.java

如果成功的话,会打印出来信息提示成功,若程序有编译错误的话,也会提示你错误的地方。

3。修改权限

因为我的这个JAVA程序里涉及到对文件的读写操作,所以要先修改权限。

首先以管理员身份登录进数据库

sqlplus / as sysdba

然后执行

begin

dbms_java.grant_permission(‘TEST‘,‘SYS:java.io.FilePermission‘,‘/var/spool/cron/oracle‘,‘read,write,execute,delete‘);

end;

/

执行完毕后,在数据库里执行上述JAVA程序时,就拥有读写该文件的权限了。

4。创建存储过程

进入到数据库,我是在SQLPLUS命令行

create or replace procedure Modify(name varchar2) as language Javaname ‘Main.modify(java.lang.String)‘;

/

会提示创建存储过程成功。

5。增加trigger

我是在TOAD里直接针对某个表增加trigger,所以我只写出关键部分的代码

begin

if :old.name = ‘time‘ then

Modify(:new.value);

end if;

end;

至此,在ORACLE的trigger里调用JAVA程序就完成了,后来的实验证明,每当更新这个表时,都确实执行了该JAVA程序,完成了对文件的读写。

时间: 2024-10-24 19:33:47

在ORACLE触发器里调用JAVA程序的相关文章

Oracle触发器反向调用Java程序

导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了, 1.操作系统需要拥有支持loadjava命令的jdk. 2.加载jlha.jar包,到oracle数据库中. 操作过程:在dos环境下,输入命令: loadjava -r -f -o -user usscares/[email protected] jlha.jar 注意:jar包要在1.4的环境下编译,项目右键 properties java compiler

Oracle触发器如何调用Java实现Openfire消息发送

写在前面,要想实现整个过程的成功执行请先准备以下文件: 1. 登陆Openfire服务端以及Spark客户端相关程序(openfire_4_0_1.exe.spark_2_7_6.exe) 2. 连接Openfire和Oracle相关的jar包(presence.jar.smack.jar.smackx-debug.jar.smackx.jar.ojdbc.jar)  Step1:安装Openfire服务端并配置数据库连接,配置参考<Openfire服务器安装与配置教程> Step2:在Ecl

LoadRunner调用Java程序—性能测试-转载

LoadRunner调用Java程序-性能测试 为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunner如何调用Java测试代码,完成压力测试. 通常我们在执行一些Server的压力测试的时候,总会不经意间想要一个Client完成对Server的调用示例,以至于我们可以通过LoadRunner直接录制,对于测试人员来说确实很方便.不过,开发人 员如果没有那么多时间去为测试人员服务,那可能就比较悲剧了,

Oracle数据库中调用Java类开发存储过程、函数的方法

Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL,除此之外,还可以用时下最流行的编程语言Java来做开发.随着对oracle的了解越来越多,越来越禁不住oracle的诱惑,oracle技术真的是一门很有趣的学问.之前,我在博客中总结了挺多有关SQL.PL/SQL的,但是对于oracle数据库中Java类的调用却没有总结,也是因为之前不太会,这会儿总

python调用java程序--jpype

官方网站:http://jpype.sourceforge.net/ 官方使用文档:http://jpype.sourceforge.net/doc/user-guide/userguide.html 1.安装 首先在官网上下载程序安装包 ubuntu系统可以直接通过 sudo apt-get install python-jpype 命令安装 ,但是因为会附带安装open-jdk pass  ,手动安装jdk,然后再安装jpype 解压目录 切换到setup.py 目录执行 sudo pyth

定时cronjob调用Java程序

一个部署在linux环境的Java企业应用后台经常会在大半夜运行很多定时的任务,本篇文章总结下如何使用shell脚本调用Java程序,以备忘. 1. setupenv.sh export APP_HOME=`pwd` if [ -z "$JAVA_HOME" ] ; then JAVA=`which java` if [ -z "$JAVA" ] ; then echo "Cannot find JAVA. Please set your PATH.&qu

C通过JNI反向调用JAVA程序方法

JNI反向调用JAVA程序 引述:上文讲过java线程---OS线程的关系,然后C怎样反向调用JAVA程序方法是我们这篇讲的重点 1.ThreadTest中添加run()方法 2.编译ThreadTest.java         javac ThreadTest.java    生成ThreadTest.class 3.javah ThreadTest    生成 ThreadTest.h文件 4.编写ThreadNew.c文件 #include<pthread.h>#include<

oracle触发器调用java程序

1.创建java程序:接收存储过程传递的参数,发送socket通信. create or replace and compilejava source named jym as import java.io.BufferedReader; import java.io.InputStream; importjava.io.InputStreamReader; import java.io.OutputStream; import java.io.StringWriter; importjava.

oracle中触发器调用Java程序

1. 写一个Java程序,Java程序的目录是:E:\APP\test\src\test\Main.java 2. 在环境变量Path中配置,E:\studyInstallPath\oracle\BIN 3. 在E:\APP\test\src\test这个目录下执行 4. 5. 创建存储过程 create or replace procedure testmodify(name varchar2) as language Java name 'Main.modify(java.lang.Stri