博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
H2数据库用户自定义函数方法及范例
阅读量:4045 次
发布时间:2019-05-24

本文共 2175 字,大约阅读时间需要 7 分钟。

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

 

官方主页:

 

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

 

     首先来说明用户自定义函数的场景,现在假设我们需要在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
* Origin Time: 2009-7-11 上午07:57:46
* * @author Seraph
* @email:seraph115@gmail.com
*/public class Function { /** * Method: TO_DATE function like Oracle's
* Origin Time: 2009-7-11 上午08:14:11
* * @author: Seraph
* @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]  [DETERMINISTIC]FOR

 

 

本例须执行的语句为: 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.*;@CODEString 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://hdhdi.baihongyu.com/

你可能感兴趣的文章
MongoDB 数据文件备份与恢复
查看>>
数据库索引介绍及使用
查看>>
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Mongodb集群搭建的三种方式
查看>>
MongoDB修改oplog size
查看>>
对 MongoDB 的一些吐槽
查看>>
mongodb分片
查看>>
node.js mongodb ReplSet
查看>>
为什么中国的程序员总被称为码农?
查看>>
MongoDB数据文件内部结构
查看>>
redis 持久化(persistence)
查看>>
Redis持久化实践及灾难恢复模拟
查看>>
详解keepalived配置和使用
查看>>
Keepalived构建双主MySQL
查看>>
keepalived.conf配置详解
查看>>
JS中的prototype
查看>>
Node.js的模块载入方式与机制
查看>>
DNS中的正向解析与反向解析
查看>>