澳门葡京投注网址

  • [预告]曾子墨做客传媒沙龙 "拷问民生、叩问生命" 2018-08-31
  • [静安]区举行决胜进博会动员大会 2018-08-31
  • [静安]区2018年全民禁毒宣传月启动仪式 2018-08-31
  • [青浦]青浦区服务保障进博会现场指挥部召开第八次全体会议 2018-08-31
  • [青浦]区委常委、政法委书记赵明来白鹤镇督查进博会维稳工作 2018-08-31
  • [视频]栗战书主持召开十三届全国人大常委会第五次委员长会议 2018-08-31
  • [视频]栗战书主持召开十三届全国人大常委会第二次委员长会议 2018-08-31
  • [视频]栗战书主持召开十三届全国人大常委会第一次委员长会议 2018-08-31
  • [视频]栗战书主持召开全国人大常委会大气污染防治法执法检查组第二次全体会议 2018-08-31
  • [视频]栗战书主持召开全国人大常委会党组会议专题学习习近平总书记关于人民代表大会制度的思想 2018-08-31
  • [视频]栗战书主持十三届全国人大常委会履职学习专题讲座 2018-08-31
  • [视频]栗战书与阿塞拜疆国民议会议长举行会谈 2018-08-31
  • [视频]栗战书与缅甸联邦议会议长兼民族院议长举行会谈 2018-08-31
  • [视频]习近平在视察北部战区海军时强调 贯彻转型建设要求 锻造海上精兵劲旅 2018-08-31
  • [视频]习近平在视察军事科学院时强调 努力建设高水平军事科研机构 为实现党在新时代的强军目标提供有力支撑 2018-08-31
  • 澳门葡京投注网址 澳门葡京投注网址 | 我的澳门葡京投注网址
    javaeye的专栏

    使用MySQL UDF在MySQL中调用Java函数

    发布者:javaeye
    发布日期:2018/5/24 23:12:45   更新日期:2018/5/24 23:14:10
    阅读次数:498
    评分:4.80
    介绍:这是一个简单的MySQL UDF,可以从MySQL中调用Java函数。
    正文:

    澳门葡京投注网址 www.guilhermecbo.com [本文由机器翻译]原文来自http://www.guilhermecbo.com/file/item/34977 压缩包里的index.html

     

    介绍
    这是一个简单的MySQL UDF,可以从MySQL调用Java函数。库(.dll或.so)文件必须对应于的体系结构你的MySQL版本,例如64位编译的MySQLUDFJavaLauncher.dll / libMySQLUDFJavaLauncher.so需要64位MySQL服务器(对于32位也是一样的),需要复制到插件目录中(例如Windows平台上的<MySQL Server主目录> \ lib \ plugin)以及两个jar文件mysqljavatrigger.jar和utils4j-0.7.0.jar。另外任何将被调用方法的java类文件都必须驻留在这个文件夹中,否则方法调用将失败。此外,通过环境变量查询Java和MySQL路径,即JAVA_HOME和MYSQL_HOME必须适当设置。 UDF需要Java Development Kit 1.6,因此环境变量应该指向相同版本的安装目录。
    此外,必须将jvm.dll和libjvm.so的路径分别添加到PATH变量中,例如%JAVA_HOME%\ jre \ bin \ server ;.

    注意:设置所有环境变量后,您需要重新启动MySQL服务器!对于Linux用户,建议在系统范围内添加变量 /etc/environment文件中,并授予所有潜在用户的插件目录访问权限,否则可能会遇到许可问题。

     

    接下来是UDF格式的一个例子:


    select call_java_method('Test', 'myMethod("Hello World")');

     

    函数call_java_method有2个参数,类名(不带文件扩展名.class),方法名带有圆括号内的可选参数列表。在该示例中,类Test的方法myMethod()用单个字符串调用参数(该类在源代码中可用,并且可以在安装UDF后用于测试目的)。类名必须完整如果它位于包中,则使用点符号(例如, de.udf.Test。多个参数必须用逗号分隔。开始并且结束包含参数的单/双引号将被忽略,这意味着它们可以在方法签名中省略。值将是作为字符串处理,并根据通过反射获得的参数类型进行后续处理。被调用的方法只能接受原始类型并且返回值总是转换为String,即将在返回的对象上调用toString()方法。更复杂的数据结构(如数组或集合)必须以指定的格式(例如JSON或XML字符串)进行传输以手动解析它们。当一堂课不存在或参数列表无效,则会向服务器发回一条消息,提示错误原因(例如参数不足。预计:2,收到:1)。放置在插件目录内的Java类必须遵守包结构以便被Java Classpath考虑,例如如果示例中的Test类具有包名称de.udf,则它应该位于/ de / udf /目录中。 JAR文件必须复制到jars目录,如果它还不存在,它将在第一次调用时自动创建。

     

    以下是一些UDF示例调用:

     

    select call_java_method('Test', 'myMethod("signature consists of multiple parameters: string, double & float", 2d, 3f)') AS MySQLUDFJavaLauncher;
    select call_java_method('de.test.A', 'getB("this function creates an instance of class B inside another package and returns it")') AS MySQLUDFJavaLauncher;
    select call_java_method('JSONExample', 'sendMessage("JSON messages can be parsed with 3rd party libraries inside the jars folder",{"key1":"value1","key2":"value2"})') AS MySQLUDFJavaLauncher;

     

    可以使用以下SQL命令来安装UDF:


    Windows:

    CREATE FUNCTION call_java_method
    RETURNS STRING
    SONAME 'MySQLUDFJavaLauncher.dll';


    Unix:

    CREATE FUNCTION call_java_method
    RETURNS STRING
    SONAME 'libMySQLUDFJavaLauncher.so';

    它可以与触发器一起使用,例如 向Java客户端通知后端的变化。 这里有两个例子:


    DELIMITER //
    DROP TRIGGER IF EXISTS users_table_trigger //
    CREATE TRIGGER users_table_trigger
    AFTER INSERT ON users
    FOR EACH ROW
    BEGIN
    DECLARE c VARCHAR(200);
    SET c = (SELECT call_java_method('NotificationTrigger', 'sendNotification("phone number of user Max in table 'Users' changed", "{"phoneNo":"123 456"}")'));
    INSERT INTO trigger_log(id,message) VALUES(null, c);
    END//
    DELIMITER ;

     

    DELIMITER //
    DROP TRIGGER IF EXISTS user_trigger //
    CREATE TRIGGER user_trigger
    AFTER INSERT ON users
    FOR EACH ROW
    BEGIN
    DECLARE c,d VARCHAR(200);
    SET c = concat('setUser(', NEW.id, ',',NEW.name, ',', NEW.email, ',', NEW.created_at,',',NEW.updated_at, ')');
    SET @d = call_java_method('com.sample.UserEntity', c);
    END//
    DELIMITER ;
    INSERT INTO users VALUES(null,'John Doe','john.doe@sample.com', NOW(),NOW());
    SELECT @d;

     

    下载源码:http://www.guilhermecbo.com/file/item/34977

     

     

     


    评论 [发表评论]
    账号 密码 还没帐号呢,现在注册一个?

    免责声明:澳门葡京投注网址所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。澳门葡京投注网址不提供任何保证,并不承担任何法律责任。