步骤如下
1.直接在SQL命令中写入JAVA代码(用SYS帐号执行,不然权限等太麻烦)
create or replace and resolve java source named udp
as
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class udp {
/*
public static void main(String[] args){
udp.send("192.168.0.110","514","java 1.5 send successfully!");
}
*/
public static String send(String ip,String port,String msg){
try{
int int_port=Integer.parseInt(port); //字符转整形
DatagramSocket ds = new DatagramSocket();
DatagramPacket dp = new DatagramPacket(msg.getBytes(), msg.length(), InetAddress.getByName(ip), int_port);
ds.send(dp);
ds.close(); //关闭连接
return "Successfully";
}catch(Exception e){
return "Failed";
}
}
}
-----------------------------------------------------------------------------------
提示:
或者先用JAVAC编译完JAVA代码,再用 loadjava 命令上传
C:>javac udp.java
/*dbadmin 为数据库管理员权限(普通权限也可以)*/
C:>loadjava -user dbadmin/password@sid -o -v -f -r c:udp.class
//此步骤如同使用 create or replace and resolve java source named udp 。。。一样。
------------------------------------------------------------------------------------
2.编写调用JAVA的包或方法
--包头 create or replace package udp is function send( p_ip in varchar2,--目标IP地址 p_port in varchar2,--目标端口号 p_msg in varchar2 --发送消息内容 ) return varchar2; --成功返回 Successfully,否则返回其他 end udp; / --包体 create or replace package body udp is function send( p_ip in varchar2,--目标IP地址 p_port in varchar2,--目标端口号 p_msg in varchar2 --发送消息内容 ) return varchar2 is language java name 'udp.send(java.lang.String,java.lang.String,java.lang.String) return java.lang.String'; end udp;
------------------------------------------------------------------
提示:
使用 PLSQL 方法也可以,如下
function send( p_ip in varchar2,--目标IP地址 p_port in varchar2,--目标端口号 p_msg in varchar2 --发送消息内容 ) return varchar2 is language java name 'udp.send(java.lang.String,java.lang.String,java.lang.String) return java.lang.String';
------------------------------------------------------------------
3.把 udp 包授权给普通用户,普通用户就可以使用了。
在SQL输入命令(使用SYS帐号),如下
GRANT EXECUTE ON udp TO USERNAME;
------------------------------------------------------------------
提示
如果出现网络等错误,可用如下代码解决(用SYS 帐输入,如下代码)
begin dbms_network_acl_admin.create_acl ( acl => 'UTL_INADDR.xml', description => 'utl_inaddr', principal => 'USERNAME', --此为将来要进行操作的用户 is_grant => TRUE, privilege => 'resolve' ); commit; end; / begin dbms_network_acl_admin.add_privilege ( acl => 'UTL_INADDR.xml', principal => 'USERNAME', is_grant => true, privilege => 'connect' ); commit; end; / begin dbms_network_acl_admin.assign_acl( acl => 'UTL_INADDR.xml', host => '*' ); commit; end; / exec sys.dbms_java.grant_permission( 'USERNAME', 'SYS:java.net.SocketPermission', '192.168.1.110:514', 'connect,resolve' );
------------------------------------------------------------------
4.使用
declare
l_res varchar2(100);
begin
l_res:=udp.send('192.168.0.10','1234','我是将要发送的内容');
if upper(l_res)='SUCCESSFULLY' then
htp.print('发送成功!');
else
htp.print('发送失败!');
end if;
end;
---------------------------------------
提示,如果这些代码日后不使用了,可用如下方法删除
1.删除包
drop package udp;
2.删除java
drop java source udp;
如果用 loadjava 上传的,可用
drop java class udp;
或在命令提示符下输入如下代码
dropjava -u dbadmin/password@sid001 udp.class
--------------------------------------