importjava.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就可以了。
oracle触发器调用java程序
标签:led blog rman jdbc byte 赋权 java.net close data
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:http://www.cnblogs.com/xinxin1994/p/5990200.html