db2用户定义函数(UDF)外部函数java实现

近期有个需求需要实现汉字个数统计(由于db2不包括执行正则表达式匹配的功能),所以需要用db2的java UDF来实现,以下是在windows环境下的实现步骤:

实现步骤

以下是一个例子(实现目标符合正则表达式个数):
java代码如下

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Count
{
   /**
     * 按照正则匹配统计
     * @param str
     * @param regexp
     * @return
     */
    public static int countByRegexp(String str,String regexp){
        int count = 0;
        Pattern p = Pattern.compile(regexp);
        Matcher m = p.matcher(str);
        while(m.find()){
            count++;
        }
        return count;
    }
}

直接进入db2实例下的JDK或JVM编译java文件或将jvm/jdk拷贝到其他目录编译如下:

C:\Users\lucifel\Desktop\db2_java\jre\bin>javac.exe -d ....\ ....\Count.java

拷贝编译好的class文件到 DB2 实例的 sqllib/function 目录下 windows目录如:

C:\Program Files\IBM\SQLLIB\FUNCTION

最后注册新建函数 代码如下:

set current schema='TEST'
CREATE OR REPLACE FUNCTION count_by_regexp(str varchar(3000),msg varchar(3000))
    RETURNS INTEGER
    FENCED 
    NOT DETERMINISTIC
    NO SQL
    LANGUAGE JAVA
    PARAMETER STYLE JAVA
    EXTERNAL NAME 'Count.countByRegexp' 
    NO EXTERNAL ACTION

上边代码中count_by_regexp函数的参数分别对应java代码中的参数
类型String对应varchar,int对应INTEGER

RETURNS INTEGER --返回类型
EXTERNAL NAME 'Count.countByRegexp' --相应的类名和方法

最后执行测试看是否成功:

--获取目标字符串字母的个数
values TEST.count_by_regexp('休息休息2ac2c33','[a-zA-Z]')

结果如下没有问题

3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,671评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,222评论 19 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,540评论 11 349
  • 每个人都希望在未来的日子里变的越来越好,希望在人生旅途中渐渐填满自己喜欢的颜色,去绽放光彩,期待遇见更具有自信力的...
    豆瓣绿儿阅读 3,251评论 4 3
  • 第一章 我不是故意的! 在繁华的上海里有一个女孩叫林墨晗!她是上海华阳中学...
    月紫煦阅读 1,081评论 0 1

友情链接更多精彩内容