锁定老帖子 主题:H2数据库用户自定义函数方法及范例
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-11
最后修改:2011-03-11
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 ALIASCREATE 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
http://www.h2database.com/html/features.html#user_defined_functions
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-06-04
有没有办法给H2的内建函数创建一个别名, 比如 ifnull ,在sql server 里叫 isnull , 再比如 current_date 在sql server里叫 getdate , 如果能给这些函数创建别名,那么可以提高兼容性。
我现在是直接改他的源代码,增加这些函数,但是这不是一个好办法, H2一升级,我又得再整一遍,所以最好的办法是能给这些内建函数创建别名。 |
|
返回顶楼 | |
浏览 5323 次