H2 Database
是什么
H2 Java SQL数据库。
H2的主要特点是:
-
非常快速的开源JDBC API
-
嵌入式和服务器模式; 内存数据库
-
基于浏览器的控制台应用程序
-
占用空间小:大约1.5 MB的jar文件大小
特性对比
H2 | Derby | HSQLDB | MySQL | PostgreSQL | |
---|---|---|---|---|---|
Pure Java | Yes | Yes | Yes | No | No |
Memory Mode | Yes | Yes | Yes | No | No |
Encrypted Database | Yes | Yes | Yes | No | No |
ODBC Driver | Yes | No | No | Yes | Yes |
Fulltext Search | Yes | No | No | Yes | Yes |
Multi Version Concurrency | Yes | No | Yes | Yes | Yes |
Footprint (jar/dll size) | ~1 MB | ~2 MB | ~1 MB | ~4 MB | ~6 MB |
作用
(1)可以和 DBUnit 这种数据测试框架结合使用。
(2)对于比较轻量的数据库处理,可以使用 h2 替代 mysql,后期替换的代价也不大。
(3)便于数据库原理的学习。因为是纯 java 实现的。
Hello World
- 引入 jar
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.196</version>
</dependency>
</dependencies>
- 入门测试
import org.h2.tools.Server;
import java.sql.*;
/**
* H2 入门测试案例
* @author bbhou
*/
public class HelloH2 {
private Server server;
private static final String URL = "jdbc:h2:mem:h2db";
private static final String PORT = "8082";
private static final String USERNAME = "sa";
private static final String PASSWORD = "123456";
/**
* 启动服务
*/
public void startServer() {
try {
System.out.println("正在启动h2...");
server = Server.createTcpServer(
new String[] { "-tcpPort", PORT}).start();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 停止服务
*/
public void stopServer() {
if (server != null) {
System.out.println("正在关闭h2...");
server.stop();
System.out.println("关闭成功.");
}
}
/**
* 简单测试
*/
public void testH2() {
// 加载驱动
try {
Class.forName("org.h2.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try(Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Statement statement = connection.createStatement()){
// 插入数据
statement.execute("CREATE MEMORY Table test(NAME VARCHAR)");
statement.execute("INSERT INTO test VALUES('Hello H2DB!')");
// 查询数据
try(ResultSet result = statement.executeQuery("SELECT NAME FROM test")) {
while (result.next()) {
System.out.println(result.getString("name"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HelloH2 h2 = new HelloH2();
// 开始服务
h2.startServer();
h2.testH2();
// 关闭服务
h2.stopServer();
}
}
- 测试结果
正在启动h2...
Hello H2DB!
正在关闭h2...
关闭成功.
小结
h2 databse 非常的轻量小巧,值得学习一波。
为后续自己手写一个简易版 h2 做准备。