H2是轻量级数据库, 可以不需要安装就可以运行,对于快速学习和演示比较适用。关于H2的基本内容可以参考: H2 数据库简介 。 本篇快速介绍H2数据库在各种类型的Java应用中的使用, 包括:
- Java 项目
- Java Web 项目
- Spring Boot项目
本篇基本环境
- Java 1.8
- Maven 3.8
- Eclipse 2022-09 (4.25.0)
- H2 2.1.214
1. Java项目使用H2
在Java项目中只需要导入H2 的依赖包就可以使用H2数据库了。以Maven为例,在pom.xml 添加如下依赖:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
添加之后, 就可以使用Java的sql 相关的类进行访问了。看起来上面的导入类似于MySQL和Oracle 的JDBC的驱动, 但其实这个库文件除了驱动类之外还包含了更多的内容,其相当于安装数据库。
数据库链接的代码如下:
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "sa");
conn.close();
jdbc:h2:~/test
, 这个是数据库的地址,~/test
意思是在用户主目录下的test 的数据库。在电脑的用户主目录下会产生如下文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hYWbf476-1670749686705)(images/screenshot_1670741925131.png)]
产生的数据表和数据会保存在这些文件中。- 在2.1.214版本中, sa账号的密码是sa,在1.x 版本中, sa的密码为空。
使用java sql 创建数据库、插入数据以及查询数据的代码如下:
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "sa");
Statement stmt = conn.createStatement();
stmt.execute("DROP TABLE MY_USER"); //删除已经存在的表
stmt.execute("CREATE TABLE MY_USER(ID VARCHAR(10) PRIMARY KEY,NAME VARCHAR(50))"); //创建表
stmt.executeUpdate("INSERT INTO MY_USER VALUES('001','刘备')"); //插入数据
stmt.executeUpdate("INSERT INTO MY_USER VALUES('002','关羽')");
stmt.executeUpdate("INSERT INTO MY_USER VALUES('003','张飞')");
ResultSet rs = stmt.executeQuery("SELECT NAME FROM MY_USER WHERE ID='001'"); //查询
while(rs.next()){
String name = rs.getString("NAME");
Assertions.assertTrue(name.equals("刘备"));
}
rs.close();
stmt.close();
conn.close();
- USER 表名是系统表,如果创建该名字的表会报错误 :
org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "CREATE TABLE [*]USER(ID VARCHAR(10) PRIMARY KEY,NAME VARCHAR(50))"; expected "identifier"; SQL statement:
。 所以这里使用MY_USER,也可以使用USR。 - 配置
jdbc:h2:~/test
地址, 被创建的表会保存在用户主目录中,如果再次创建会报已经存在。
H2管理控制台
MySQL 可以使用MySQL workbench 工具连接数据库进行可视化操作, Oracle 可以使用SQL Develop客户端工具,那么H2 怎么可视化的连接数据库呢? 命令行切换到h2 的jar 文件目录,通过java命令直接运行这个文件,运行后会自动打开一个网址, 如下图:
登录之后就可以在浏览器中进行数据库相关的操作了
**注意: ** 通过java 运行jar文件是启动数据库并且提供管理控制台, 上面代码的方式连接数据库也是会先启动数据库。两者都会启动数据库,所以只能同一时刻只能运行一个,运行的一个会把数据库文件锁定, 另一个使用会报已经在使用的错误。
2. Java Web项目使用H2
Java Web 项目使用H2可以在 web.xml 做如下配置:
<listener>
<listener-class>org.h2.server.web.DbStarter</listener-class>
</listener>
<servlet>
<servlet-name>H2Console</servlet-name>
<servlet-class>org.h2.server.web.WebServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>H2Console</servlet-name>
<url-pattern>/console/*</url-pattern>
</servlet-mapping>
- 配置一个监听器, 在Web项目启动的时候启动H2数据库
- 配置H2控制台的Servlet,通过Sevlet 可以管理数据库。
3. Spring Boot 项目使用H2
Spring Boot很好的兼容了H2数据库, 只要在应用的配置文件添加H2相关的配置即可, 类似:
##H2 Database
#1.数据源的平台
spring.datasource.platform=h2
#2.数据源驱动类
spring.datasource.driver-class-name=org.h2.Driver
#3.数据源地址。mem代表Memory,内存数据库。myh2是数据库的名字,可以任取。
spring.datasource.url=jdbc:h2:mem:myh2
完整的介绍可以参考:
Spring Boot整合H2内存数据库配置及常见问题处理