如何oracle数据更新时触发java代码

就是想在数据库表中的数据更新或者插入数据时,能触发我写好的java代码?可以吗?例如当一个表中插入一条记录时出发我写好的消息提醒功能,给我发一条信息!注:我不想用ajax... 就是想在数据库表中的数据更新或者插入数据时,能触发我写好的java代码?可以吗?例如当一个表中插入一条记录时出发我写好的消息提醒功能,给我发一条信息!注:我不想用ajax实现隔段时间去监听数据库,我想让数据库有变化时主动触发我的程序!可以实现吗? 展开
 我来答
小傻

推荐于2021-01-16 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31133
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

oracle数据更新时触发java代码的步骤如下:

1。编写JAVA程序

public class Main {  
 public static void modify(String statTime)  
    {  
         String datas = "/var/spool/cron/oracle";  
        File data = new File(datas);  
        StringBuffer backup = null;  
        try {  
             StringBuffer content = new StringBuffer();  
              backup = new StringBuffer();  
            BufferedReader san = new BufferedReader(new FileReader(data));  
            String line = null;  
            while((line=san.readLine())!=null)  
            {  
                backup.append(line);  
                backup.append("/n");  
            }  
           content.append("15 ");  
           content.append(statTime.trim());  
           content.append(" * * * /home/oracle/task.sh");  
           content.append("/n");  
  
           content.append("13 ");  
           content.append(statTime.trim());  
           content.append("* * * /home/oracle/tj_task/task2.sh");  
           content.append("/n");  
             
           FileWriter writer = new FileWriter(data,false);  
            writer.write(content.toString());  
            writer.flush();  
  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                try  
                {  
                    FileWriter writer = new FileWriter(data,false);  
                    writer.write(backup.toString());  
                    writer.flush();  
                }catch(Exception ex)  
                {  
                    ex.printStackTrace();  
                }  
            }  
    }  
}

 

注意,这里写JAVA程序不需要遵循标准的JAVA程序,一定要有main入口函数,相反,这里的函数一般不要取名为main,除非格式是标准的main 函数格式

2。把JAVA程序LOAD进oracle

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

loadjava -user test/test@test -o -v -f -r Main.java

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

3。修改权限

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

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 java name 'Main.modify(java.lang.String)';

/

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

5。增加trigger

TOAD里直接针对某个表增加trigger,所以关键部分的代码

begin

if :old.name = 'time' then

Modify(:new.value);

end if;

end;

wsnlaijie
2011-03-22
知道答主
回答量:29
采纳率:0%
帮助的人:0
展开全部
oracle触发器可以做这个事情,我知道是可以发邮件的,如果数据是由另外的客户端写入的,不在本程序的控制范围的话,用ajax监听也是一种不错的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沧济先生
2011-03-22 · TA获得超过193个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:150万
展开全部
数据库是地层的东西,java可以通过api来访问他 。而不是oracel来使用java,你要搞明白这层道理,没必要这样,数据库有变化肯定是你在程序中对数据库有访问,访问结束后就给出提示,不就可以了,干嘛还要做轮训监听呢?
追问
我知道java可以通过api来访问oracel,我就是有这么个需求!谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
被坑户内20
2011-03-22 · TA获得超过621个赞
知道小有建树答主
回答量:854
采纳率:0%
帮助的人:465万
展开全部
先建个触发器,在触发器里有执行触发java。 比如直接执行jar包,或者调用执行bat文件,间接执行jar包。 我觉得可以,但是没做过。。
追问
这个技术还确实有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友38fbca590
2011-03-25 · 超过92用户采纳过TA的回答
知道小有建树答主
回答量:950
采纳率:0%
帮助的人:406万
展开全部
可以
1.新建一个java source
create or replace and compile java source named j_source as
public class j_class{
public static String j_socket(String str)
{
//socket连接客户端发送给客户端
}
}

2.新建一个function
create or replace function fun_call_java(str VARCHAR2) return VARCHAR2 as
language java name j_class.j_socket(java.lang.String) return java.lang.String ';

3.写一个触发器
当有记录更新时,调用function fun_call_java,然后由oracle的java source通知客户端
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式