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

H2数据库用户自定义函数方法及范例的更多相关文章

  1. Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库

    H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分.下面来演示一下如何将H2数据库嵌入到我们的Web应用中. 一.搭建测 ...

  2. 查看Jira 使用的H2数据库 数据结构以及内容的方法

    1. 同事在研究jira 想看看jira的数据库 数据结构, 告知使用的是java的H2数据库. 如图示 2. 然后根据此内容 进行百度等. 下载 可以进行数据库连接的工具,主要找到两个,下载地址分别 ...

  3. T-SQL编程 —— 用户自定义函数(标量函数)

    用户自定义函数 在使用SQL server的时候,除了其内置的函数之外,还允许用户根据需要自己定义函数.根据用户定义函数返回值的类型,可以将用户定义的函数分为三个类别: 返回值为可更新表的函数 如果用 ...

  4. SQL之用户自定义函数

    关于SQL Server用户自定义的函数,有标量函数.表值函数(内联表值函数.多语句表值函数)两种. 题外话,可能有部分朋友不知道SQL Serve用户自定义的函数应该是写在哪里,这里简单提示一下,在 ...

  5. 详解Spark sql用户自定义函数:UDF与UDAF

    UDAF = USER DEFINED AGGREGATION FUNCTION Spark sql提供了丰富的内置函数供猿友们使用,辣为何还要用户自定义函数呢?实际的业务场景可能很复杂,内置函数ho ...

  6. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

  7. H2数据库集群

    H2数据库集群 1. H2数据库简单介绍 1.1 H2数据库优势 经常使用的开源数据库:H2,Derby,HSQLDB.MySQL,PostgreSQL. 当中H2,HSQLDB相似,十分适合作为嵌入 ...

  8. SQL SERVER 用户自定义函数(UDF)深入解析

    本文内容概要: UDF 概念.原理.优缺点.UDF 的分类 详细讲述3种 UDF 的创建.调用方法以及注意事项 UDF 的实践建议 基本原理: UDF:user-defined functions,用 ...

  9. Hive中的用户自定义函数

    1.1 关于自定义函数 1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展. 2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考 ...

  10. 你真的会玩SQL吗?实用函数方法汇总

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

随机推荐

  1. 九问 GBase | 如何看待“科技制裁”?如何助力中国数据库国产化落地?

    导读: Oracle.SAP.Apple.Google.Github等国际科技巨头纷纷宣布停止在俄罗斯业务,英特尔.AMD.戴尔等科技企业也被曝已中断向俄供货.当全面科技制裁来临,俄罗斯将如何应对此次 ...

  2. vue前端使用nexus配置npm私有仓库

    当我们运行前端项目的时候,常常在解决依赖的时候会加上一个参数npm install --registry=https://registry.npm.taobao.org将源指定为淘宝的源,以期让速度加 ...

  3. 什么是 DOM

    百度: DOM 定义:文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口.它是一种与平台和语言无关的应用程序接口(API),它可 ...

  4. vant2 自动检查表单验证 -validate

    ref 给 <van-form @submit="onSubmit" ref="form"> 标签 : // 检验手机号是否合格 await thi ...

  5. element 的 表单 搜索 和 重置按钮换行问题 ? inline

    想要: 但是: 加上

  6. 00 通过 Pytorch 实现 Transformer 框架完整代码

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  7. ATC:多快好省,无参数token reduction方法 | ECCV'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Agglomerative Token Clustering 论文地址:https://arxiv.org/abs/2409.11923 论文 ...

  8. Visual Studio Release版本开启debug窗口进行调试输出。

    "项目 -> 属性 -> 生成事件 ->后期生成事件 -> 命令行" 中添加: editbin /SUBSYSTEM:CONSOLE $(OutDir)\$ ...

  9. Codeforces Round 988 (Div. 3) E题解析

    E题 题目链接 Codeforces Round 988 (Div. 3) 题目描述 题目的思路 根据题目的意思,我们可以推断出算法时间复杂度应该在O(N) 对于这道题而言,我们可以分析下思路 首先我 ...

  10. flask+APScheduler定时任务的使用

    目录 APScheduler简介 安装 add_job参数详解 结合flask使用 用uwsgi启动项目 用gunicorn+gevent启动flask项目 APScheduler简介 APSched ...