zoukankan      html  css  js  c++  java
  • H2数据库用户自定义函数方法及范例

    H2
    数据库,是Java实现的内存数据库。可使用它作为嵌入式内存数据库,但就其特性还用更多值得应用在实际项目中的意义。之前的一篇Blog中已经描述过其使用方法及丰富的连接数据库方式。

    官方主页:http://www.h2database.com/

    此段文字只说明用户如何自定义数据库函数,以及在数据库中注册函数。如对你有帮助可继续阅读

         首先来说明用户自定义函数的场景,现在假设我们需要在H2数据库中实现Oracle的“TO_DATE”函数,那么需要的过程是这样的:(1) 使用Java实现自定义函数的方法。(2) 将Java的自定义函数注册到H2数据库中。

    (1) 首先我们来实现这个函数:

    TO_DATE函数的Code:

    /**
     * 
     */
    package com.seraph.bi.suite.support.h2;
    
    import java.text.SimpleDateFormat;
    import org.h2.tools.SimpleResultSet; 
    ... ...
    
    /**
     * Description: Function for H2 database<br>
     * Origin Time: 2009-7-11 上午07:57:46<br>
     * 
     * @author Seraph<br>
     * @email:seraph115@gmail.com<br>
     */
    public class Function {
    
    	/**
    	 * Method: TO_DATE function like Oracle's<br>
    	 * Origin Time: 2009-7-11 上午08:14:11<br>
    	 * 
    	 * @author: Seraph<br>
    	 * @param source
    	 * @param format
    	 * @return
    	 * @throws ParseException 
    	 */
    	public static java.sql.Date to_date(String source, String format) throws ParseException {
    		// TODO: 'YYYY-MM-DD' ? Oracle format?
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    		java.util.Date date = sdf.parse(source);
    		return new java.sql.Date(date.getTime());
    	}
    	... ...
    }
    

     以上代码段是TO_DATE的实现,但用户自定义的函数需注意的是:类和方法必须是公共(Public)的,且方法需为静态(static)的,如方法中使用了Connection对象需将其关闭。

    (2) 将其注册到数据库中,须执行语句



    CREATE ALIAS

    CREATE ALIAS [IF NOT EXISTS] newFunctionAliasName
    
    
     [DETERMINISTIC]
    FOR classAndMethodName
    
    
    
    



    本例须执行的语句为: CREATE ALIAS TO_DATE FOR "com.seraph.bi.suite.support.h2.Function.to_date";

    这样再执行类似语句,如:SELECT to_date('2009-1-21','YYYY-MM-DD') from Your_Table  函数TO_DATE即可被解析了。

    完成以上的步骤你就可以使用自己定义的数据库函数了。这样将更方便于数据库之间的切换,使用内存数据库应用程序启动轻快,体积小,适合于程序开发时的单元测试及集成测试,同时更适合于去客户方演示。

    备注:

    1.如使用的是编译类,需添加至jdbc驱动jar包中。

    2.如使用的是源码,可直接使用sql语句添加至库中。例:

    CREATE ALIAS IP_ADDRESS AS $$
    import java.net.*;
    @CODE
    String ipAddress(String host) throws Exception {
        return InetAddress.getByName(host).getHostAddress();
    }
    $$;

    官方说明文档:

    User-Defined Functions and Stored Procedures

    In addition to the built-in functions, this database supports user-defined Java functions. In this database, Java functions can be used as stored procedures as well. A function must be declared (registered) before it can be used. A function can be defined using source code, or as a reference to a compiled class that is available in the classpath. By default, the function aliases are stored in the current schema.

    http://www.h2database.com/html/features.html#user_defined_functions

  • 相关阅读:
    洛谷P3959 宝藏(状压dp)
    洛谷P3645 [APIO2015]雅加达的摩天楼(最短路+分块)
    洛谷P3646 [APIO2015]巴厘岛的雕塑(数位dp)
    洛谷P4770 [NOI2018]你的名字(后缀自动机+线段树)
    洛谷P4768 [NOI2018]归程(克鲁斯卡尔重构树+最短路)
    hive3.1.1 hive-site.xml
    mysql 远程连接数据库的二种方法
    linux彻底干干净净完全卸载 mysql
    jdk环境变量配置
    Eclipse常用快捷键
  • 原文地址:https://www.cnblogs.com/exmyth/p/12522874.html
Copyright © 2011-2022 走看看