java 调用触发器_oracle触发器调用java程序

1、创建java程序:接收存储过程传递的参数,发送socket通信。

create or replace and compilejava source named jym asimportjava.io.BufferedReader;importjava.io.InputStream;

importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.StringWriter;

importjava.net.InetSocketAddress;importjava.net.Socket;importjava.sql.Connection;importjava.sql.DriverManager;

importjava.sql.PreparedStatement;importjava.sql.Statement;public classJYM {public static StringsendSynMsg(String ipAddr, byte[] datas) throwsException{

InetSocketAddress endpoint= new InetSocketAddress(ipAddr ,18002);

Socket socket= null;

OutputStream out= null;

InputStream in= null;try{

socket= newSocket();

socket.connect(endpoint);

out=socket.getOutputStream();

in=socket.getInputStream();

out.write(datas);

out.flush();return null;

}finally{if (out != null) {try{

out.close();

}catch(Exception ex) {

ex.printStackTrace();

}

}if (in != null) {try{

in.close();

}catch(Exception ex) {

ex.printStackTrace();

}

}if (socket != null) {try{

socket.close();

}catch(Exception ex) {

ex.printStackTrace();

}

}

}

}public static void say(String ip,byte[] context) throwsException {

String str=JYM.sendSynMsg(ip,context);

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.9.109:1521:orcl","zhym","jhhz621");

PreparedStatement pr=conn.prepareStatement("insert intobackdata(context) values(?)");

pr.setBytes(1, context);

pr.executeUpdate();

pr.close();

conn.close();

}

}2、存储过程调用java source

create or replace procedure socket(

ip varchar2,

context raw

)

as

language java name'JYM.say(java.lang.String,byte[])';3、触发器调用存储过程

create or replace trigger todata_after

after insert on todataforeach row

begin

socket('192.168.9.12',:new.context);

end todata_after;

代码写好后可以先用存储过程测试:

Sql代码

call socket('192.168.9.12','023132');

为了能在控制台中看见错误信息,要先运行下面3句话

set serveroutput on;

set serveroutput on size5000;

call dbms_java.set_output(5000);

假如你运行存储过程时爆出了 请给用户复制权限的提示则按照提示在sysdba 下赋权限,如:

Sql代码

exec dbms_java.grant_permission('zhym','SYS:java.net.SocketPermission','192.168.9.12:18002','connect,resolve')

exec dbms_java.grant_permission('ZHYM','SYS:java.net.SocketPermission','127.0.0.1:1521','connect,resolve')

execdbms_java.grant_permission('zhym','SYS:java.net.SocketPermission','192.168.9.12:18002','connect,resolve')

execdbms_java.grant_permission('ZHYM','SYS:java.net.SocketPermission','127.0.0.1:1521','connect,resolve')

exec 后面的语句会在你的报错提示中打印出来,只要前面加exec就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值