H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分。下面来演示一下如何将H2数据库嵌入到我们的Web应用中。
一、搭建测试环境和项目
1.1、搭建JavaWeb测试项目
创建一个【H2DBTest】JavaWeb项目,将H2的Jar包引入到工程中。
H2数据库就一个jar文件,这个Jar文件里面包含了使用JDBC方式连接H2数据库时使用的驱动类,将"h2-1.4.187.jar"加入到【H2DBTest】项目中,如下图所示:
二、启动H2数据库
我们在Web.xml文件中注册这个监听器,另外,因为我们要将H2数据库嵌入到我们的Web应用当中,为了能够方便访问H2数据库提供的Console,我们可以在Web.xml文件中配置用于访问H2数据库Console的Servlet。
Web.xml文件的配置如下:
<!-- h2 Console start -->
<servlet>
<servlet-name>H2Console</servlet-name>
<servlet-class>org.h2.server.web.WebServlet</servlet-class>
<init-param>
<param-name>webAllowOthers</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>trace</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>H2Console</servlet-name>
<url-pattern>/console/*</url-pattern>
</servlet-mapping>
<!-- h2 Console end -->
为了进一步验证H2数据库是否真的是通过监听器正常启动了,我们可以访问一下H2数据库的Console,输入访问地址:"http://localhost:8080/H2DBTest/console/"进行访问,如下图所示:
能够看到H2数据库Console的登录页面,说明了H2数据库已经正常启动了。
三、向H2数据库注册自定义的数据库函数
H2作为一个数据库,和其他类型的数据库一样,会自带有一些数据库函数给我们使用,但是H2数据库提供的数据库函数有限,无法满足我们开发中的需求,幸运的是,H2数据库支持自定义数据库函数的,因此我们可以根据开发中的实际应用场景编写满足我们需求的数据库函数。
下面就来说一下如何实现H2数据库的自定义函数
在MySQL数据库中有一个UUID函数是用来生成UUID的,执行"SELECT UUID()"就可以看到UUID函数生成的UUID,如下图所示:
而默认情况下,H2数据库是没有提供有UUID这个函数给我们使用的,如下图所示:
那么我们现在就来实现一个UUID函数,然后注册到H2数据库当中,这样H2数据库就支持UUID函数了,具体做法分为两个步骤:
(1) 使用Java实现自定义函数的方法。
(2) 将Java的自定义函数注册到H2数据库中。
首先我们来实现这个UUID函数,在java中,生成一个UUID的方法是使用java.util.UUID这个类里面的一个randomUUID()方法生成的,封装成一个uuid方法,代码如下:
1 package h2db.function.ext; 2 3 import java.util.UUID; 4 5 /** 6 * @ClassName: H2DBFunctionExt 7 * @Description: 针对H2数据库函数的扩展 10 * 11 */ 12 public class H2DBFunctionExt { 13 14 /** 15 * 用法:SELECT uuid(); 16 * H2数据库注册uuid函数:CREATE ALIAS uuid FOR "h2db.function.ext.H2DBFunctionExt.uuid"; 20 * 21 * @return 22 */ 23 public static String uuid(){ 24 return UUID.randomUUID().toString(); 25 } 26 }
这样,我们的uuid函数就算是编写好了,需要注意的是,类和方法必须是公共(Public)的,且方法需为静态(static)的,如方法中使用了Connection对象需将其关闭。
接下来我们要将其注册到H2数据库中,须执行"CREATE ALIAS"语句,SQL语法如下:
1 CREATE ALIAS [IF NOT EXISTS] newFunctionAliasName [DETERMINISTIC] FOR classAndMethodName
其中[]括起来的部分是可选的,本例须执行的语句为: CREATE ALIAS UUID FOR "h2db.function.ext.H2DBFunctionExt.uuid" ,执行结果如下图所示:
这样H2数据库中就多了一个UUID函数可以使用了,我们再次执行"SELECT UUID()"语句就可以被H2数据库正常解析了,执行结果如下图所示: