zoukankan      html  css  js  c++  java
  • 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

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

      

  • 相关阅读:
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    205. Isomorphic Strings
    204. Count Primes
    203. Remove Linked List Elements
    201. Bitwise AND of Numbers Range
    199. Binary Tree Right Side View
    ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步
  • 原文地址:https://www.cnblogs.com/ser0632/p/4920154.html
Copyright © 2011-2022 走看看