4.2、环境配置
String DRIVER_CLASS = "org.h2.Driver"; String JDBC_URL = "jdbc:h2:mem:h2DB"; String USER = "root"; String PASSWORD = "root";
说明:
org.h2.Driver
表示使用h2
嵌入式数据库模式。JDBC_URL
中的h2DB
表示创建一个名为h2DB
的临时数据库。USER
、PASSWORD
主要用于客户端登录使用。
4.3、单元测试应用
下面,来测试一下h2
是否可以正常使用。
public class H2Test { /** * 以嵌入式(本地)连接方式连接H2数据库 */ private static final String JDBC_URL = "jdbc:h2:mem:h2DB"; private static final String DRIVER_CLASS = "org.h2.Driver"; private static final String USER = "root"; private static final String PASSWORD = "root"; public static void main(String[] args) throws Exception { //与数据库建立连接 Class.forName(DRIVER_CLASS); Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD); Statement statement = conn.createStatement(); //删除表 statement.execute("DROP TABLE IF EXISTS USER_INF"); //创建表 statement.execute("CREATE TABLE USER_INF(id VARCHAR(50) PRIMARY KEY, name VARCHAR(50) NOT NULL, sex VARCHAR(50) NOT NULL)"); //插入数据 statement.executeUpdate("INSERT INTO USER_INF VALUES('1', '程咬金', '男') "); statement.executeUpdate("INSERT INTO USER_INF VALUES('2', '孙尚香', '女') "); statement.executeUpdate("INSERT INTO USER_INF VALUES('3', '猴子', '男') "); //查询数据 ResultSet resultSet = statement.executeQuery("select * from USER_INF"); while (resultSet.next()) { System.out.println(resultSet.getInt("id") + ", " + resultSet.getString("name") + ", " + resultSet.getString("sex")); } //关闭连接 statement.close(); conn.close(); } }
输出结果:
1, 程咬金, 男 2, 孙尚香, 女 3, 猴子, 男
h2 作为嵌入式数据库应用可以选择两种类型的url
,第一种是内存模式运行,这种模式将数据临时放到内存中,程序结束后数据表和数据立即被销毁,就不存在了;第二种是使用本地文件方式,将数据持久化到文件中,当再次连接数据库时,可以获取历史数据。
#第一种,内存模式运行 jdbc:h2:mem:testDB #第二种,使用本地文件方式 jdbc:h2:file:./target/testDB
h2 还可以作为数据库服务器使用,单独部署在服务器上,应用程序通过远程连接进行操作,连接方式如下:
#连接语法 jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName> #范例: jdbc:h2:tcp://localhost:8080/~/test
如果想使用可视化客户端工具来访问和管理h2
,可以通过它自带的 web 页面进行管理。
下面我们以springboot
项目为例,通过配置使用h2
自带的管理页面来维护。
新建一个WebConfig
类,配置h2
的 web 控制台,如下:
@Configuration public class WebConfig { /** * 添加h2控制台的映射地址 * @return */ @Bean ServletRegistrationBean h2servletRegistration(){ ServletRegistrationBean registrationBean = new ServletRegistrationBean(new WebServlet()); registrationBean.addUrlMappings("/h2-console/*"); return registrationBean; } }
启动springboot
项目,打开浏览器,输入http://127.0.0.1:8080/h2-console
访问管理页面!
填写连接地址、账号、密码之后,进行连接!
可以在工作台,编写 sql 语句进行查询,同时对查询结果还可以进行编辑操作。
五、性能测试
上文中我们介绍了三者数据库的使用,下面,我们以循环插入1000、10000、100000次操作,分别来测试三个数据库的性能,看看他们的表现如何?
从结果上看:
- derby 与 sqlite 性能方面相差不大,但是随着插入数量越多,derby 比 sqlite 稍逊一些。
- 三者相比,h2 性能最好,无论是将数据写入内存,还是写入到数据库,性能都是最好的。
六、总结
- derby 作为嵌入式数据库,在性能和易用性都不错,数据库是以一个目录存储的,但只能用于Java程序中。
- sqlite 因为支持多种语言,也提供了对 SQL92 的大多数支持,执行效率也不错,作为嵌入式数据库应用最广,但如果想查询数据只能本地连接不能远程连接。
- h2 作为嵌入式数据库的新秀,主要优势:超轻量级,可以支持内存模式,高效高速,能支持基本的全文搜索,同时与 mysql 数据库兼容性最强,一般使用场景最多的就是在开发环境上进行回归测试使用。