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] 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.

h2支持mysql函数,H2数据库用户自定义函数方法及范例相关推荐

  1. MySql直接备份数据库文件的方法(MyISAM和InnoDB有所不同)

    MySql直接备份数据库文件的方法(MyISAM和InnoDB有所不同) mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法 补充:正 ...

  2. mysql中vlookup函数_数据库合并函数vlookup介绍

    昨天我们介绍了EXCEL当中的IF函数以及COUNTIF函数在数据处理当中的使用.今天来介绍另外一个我们在数据提取经常用到的函数:Vlookup. 实例介绍 我们在进行数据分析的时候,经常需要对数据进 ...

  3. timesten支持mysql吗_TimesTen数据库初探

    Daemon进程会为每个共享data store启动一个Subdaemon进程. Timesten后台进程还包括Server Daemon.Server Child.Cache agents和Repl ...

  4. mysql(mariadb)修改数据库名称的方法

    如果表示MyISAM那么可以直接去到数据库目录mv就可以. 一,最简单的 :把数据库停掉,然后去data目录把文件夹名称改了,然后重启就可以了. 二,Innodb完全不行,会提示相关表不存在,暂未测试 ...

  5. access数据库mysql文件_access数据库的打开方法

    1.在"文件"菜单上,单击"打开". 2.单击"打开"对话框左侧的快捷方式,或者在"查找范围"框中,单击包含要打开的 M ...

  6. db2自定义函数能返回几个参数_DB2 用户自定义函数

    用户自定义函数 DB2 内部提供了大量的函数,例如求某个字段最大值的 MAX() 函数,求某个日期所在年份的 YEAR() 函数,等等.如果在使用 DB2 的过程中,需要反复使用同一个功能,就可以把这 ...

  7. xampp修改mysql密码_XAMPP环境下mysql的root用户密码修改方法_MySQL

    XAMPP 最近有客户忘记了mysql的root用户密码,使用mysqld_safe无法正常启动mysql,也没有办法按照mysql manual中的方法修改root密码. 网页教学网站长注:今天有学 ...

  8. mysql数据库支持的函数_数据库MySQL--常见函数

    函数:将一组逻辑语句封装在函数体中,对外暴露函数名 调用:select 函数名() from 表:(若用到表中的字段则家上'from 表') 函数分类:   1.单行函数(例:concate.leng ...

  9. mysql数据库div函数_关于使用mysql中的div函数报错?报错-问答-阿里云开发者社区-阿里云...

    数据库MySQL 5.5.27 jar包:mysql-connector-java-5.1.21.jar mybatis-spring-1.1.1.jar druid-0.2.10.jar 集成myb ...

  10. rds支持mysql自带函数吗_MySQL自定义函数(CREATE FUNCTION)

    在使用MySQL的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数.自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和过程式 ...

最新文章

  1. Java项目:朴素风个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  2. 图灵奖得主Bengio又出新论文:用强化学习提升模型泛化性!网友崩溃:idea撞车了......
  3. T-SQL中default值的使用
  4. php 上传文件tmp name,解决PHP上传is_uploaded_file的tmp_name错误
  5. 卸料装置弹性零件的计算方法_冲裁模卸料板的设计
  6. arthas命令整理:基础命令、jvm相关、class相关命令
  7. 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)
  8. 网络转型临界点 带你看瞻博网络的创新步伐
  9. 第一节《Git初始化》
  10. 已饱和!未来程序员没活路了...
  11. mysql 吧库下的表名都加_MySQL 数据库名、表名、字段名大小写敏感记录
  12. 多数据源报表解析之简单多源报表
  13. UE4官方文档毛发部分整合笔记
  14. flash动画转html5 效果,一键把SWF转HTML5 canvas动画的工具-Fanvas
  15. 基于Keil 5编写汇编程序
  16. 计算机模拟专业委员会,中国化工学会过程模拟及仿真专业委员会成立
  17. 众智日照服务器无响应,众智日照分析常见问题解释
  18. java架构师培训-成为java架构师的标准是什么
  19. 海信系统 重装服务器,海信电视如何重刷系统
  20. 记一次git 之windows凭据管理器引发的xx

热门文章

  1. 《Learning Scheduling Algorithms for Data Processing Clusters》
  2. 树莓派CM4设置静态IP地址(已解决)
  3. sre和devops_什么是SRE,它与DevOps有什么关系?
  4. 阿里云服务器的搭建和部署(小白教程)
  5. 笔记本处理器排名_上半年最受欢迎处理器TOP10榜单:AMD终进榜,9代酷睿无缘前10...
  6. UVA Team Queue
  7. Java实现socket 客户端 长连接
  8. mqtt 服务器 ca 证书,如何将SSL MQTT客户机与CA签名服务器证书连接?
  9. 丁磊:顶尖技术人才的特质,是热爱与专注!
  10. 如何取消默认浏览器中hao123主页