Java H2
最后修改于 2024 年 1 月 27 日
Java H2 教程展示了如何在 Java 中进行 H2 数据库编程。
H2 是一个用 Java 编写的关系数据库管理系统。它可以嵌入到 Java 应用程序中,也可以在客户端-服务器模式下运行。它也可以在内存模式下使用。
H2 的体积非常小。它带有一个基于浏览器的管理应用程序,称为 H2 Console。
下载 H2
从 H2 的主页,我们下载 ZIP 文件中的数据库。
$ unzip h2-2022-06-13.zip
我们解压缩该存档。
Java H2 内存示例
在第一个示例中,我们连接到内存中的 H2 数据库。 此示例不需要运行 H2 服务器。
bin
com
└── zetcode
└── SimpleEx.java
lib
└── h2-2.1.214.jar
这是我们的项目结构。
package com.zetcode;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SimpleEx {
public static void main(String[] args) {
var url = "jdbc:h2:mem:";
try (var con = DriverManager.getConnection(url);
var stm = con.createStatement();
var rs = stm.executeQuery("SELECT 1+1")) {
if (rs.next()) {
System.out.println(rs.getInt(1));
}
} catch (SQLException ex) {
var lgr = Logger.getLogger(SimpleEx.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
}
}
}
该示例连接到一个 H2 内存数据库并执行一个查询。 创建了一个仅供一个连接使用的内存私有数据库。 当与数据库的连接关闭时,该数据库也被关闭。
var url = "jdbc:h2:mem:";
此 URL 用于 H2 数据库的内存模式。
$ javac com/zetcode/SimpleEx.java -d bin
我们编译程序。
$ java -cp bin:lib/* com.zetcode.SimpleEx 2
我们运行该程序。
创建数据库
在旧版本的 H2 中,如果数据库不存在,会自动创建。 由于安全原因,这不再可能。 我们需要在连接到数据库之前创建数据库。
$ java -cp lib/h2-2.1.214.jar org.h2.tools.Shel Welcome to H2 Shell 2.1.214 (2022-06-13) Exit with Ctrl+C [Enter] jdbc:h2:~/test URL jdbc:h2:~/tmp/h2dbs/testdb [Enter] org.h2.Driver Driver [Enter] sa User Password
可以使用 shell 工具创建一个名为 testdb 的新数据库。
启动 H2 服务器
现在我们将启动 H2 服务器。
$ java -jar lib/h2-2.1.214.jar -baseDir ~/tmp/h2dbs
我们移动到安装目录并在服务器模式下运行 H2。 该命令启动一个 Web 控制台应用程序和两个本地连接; PG 服务器是具有 PostgreSQL 协议的 PostgreSQL 兼容模式。 生成数据库文件的目录设置为 ~/tmp/h2dbs,其中 ~ 代表主目录。
我们进入 Web 控制台,使用 jdbc:h2:~/tmp/h2dbs/testdb URL 连接到 testdb 数据库。 数据库在 ~/tmp/h2dbs 目录中生成。 默认用户是 sa。
ALTER USER sa SET PASSWORD 's$cret'
在控制台中,我们可以使用 ALTER USER 语句为用户 sa 设置密码。
CREATE TABLE cars(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), price INT);
INSERT INTO cars(name, price) VALUES('Audi', 52642);
INSERT INTO cars(name, price) VALUES('Mercedes', 57127);
INSERT INTO cars(name, price) VALUES('Skoda', 9000);
INSERT INTO cars(name, price) VALUES('Volvo', 29000);
INSERT INTO cars(name, price) VALUES('Bentley', 350000);
INSERT INTO cars(name, price) VALUES('Citroen', 21000);
INSERT INTO cars(name, price) VALUES('Hummer', 41400);
INSERT INTO cars(name, price) VALUES('Volkswagen', 21600);
这是创建 cars 表的 SQL。 我们在一个示例中使用此表。
Java H2 服务器示例
在下一个示例中,我们从之前创建的 cars 表中选择数据。
$ java -jar lib/h2-2.1.214.jar -baseDir ~/tmp/h2dbs
对于此示例,我们使用以下命令启动 H2 服务器
package com.zetcode;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SimpleEx {
public static void main(String[] args) {
var url = "jdbc:h2:tcp://:9092/~/tmp/h2dbs/testdb";
var user = "sa";
var passwd = "s$cret";
var query = "SELECT * FROM cars";
try (var con = DriverManager.getConnection(url, user, passwd);
var st = con.createStatement();
var rs = st.executeQuery(query)) {
while (rs.next()) {
System.out.printf("%d %s %d%n", rs.getInt(1),
rs.getString(2), rs.getInt(3));
}
} catch (SQLException ex) {
var lgr = Logger.getLogger(SimpleEx.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
}
}
}
该示例连接到 H2 服务器并执行查询。 它返回 cars 表中的所有行。
var url = "jdbc:h2:tcp://:9092/~/tmp/h2dbs/testdb";
这是连接到 H2 服务器的 testdb 数据库的 URL。
$ javac com/zetcode/SimpleEx.java -d bin $ java -cp bin:lib/* com.zetcode.SimpleEx 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600
我们编译并运行程序。
来源
Java H2 教程展示了如何在 Java 中编程 H2 数据库。
作者
列出所有Java教程。