• PL/SQL 调用JAVA使用UDP发送数据


    步骤如下

    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

        --------------------------------------

      

  • 相关阅读:
    4.JDBC技术
    3.MySQL数据库
    2.Oracle数据库
    (转载)Linux 套接字编程中的 5 个隐患
    一个Sqrt函数引发的血案
    二叉搜索树BinarySearchTree(C实现)
    vector,list.queue,array.....
    boost::Circular Buffer
    boost::operators
    Disjoint Sets
  • 原文地址:https://www.cnblogs.com/ser0632/p/4920154.html
Copyright © 2020-2023  润新知