原文:http://zetcode.com/java/h2database/

Java H2 教程展示了如何使用 Java 在 H2 中进行数据库编程。

H2 是用 Java 编写的关系数据库管理系统。 它可以嵌入 Java 应用中或以客户端-服务器模式运行。 也可以在存储模式下使用。

H2 的占地面积很小。 它带有一个称为 H2 控制台的基于浏览器的管理应用。

下载 H2

从 H2 的主页,我们以 ZIP 文件下载数据库。

  1. $ unzip h2-2019-03-13.zip

我们解压缩档案。

  1. $ mv h2 ~/bin/

我们将安装目录移动到我们选择的目标位置。

Java H2 内存示例

在第一个示例中,我们连接到内存中的 H2 数据库。 在此示例中,无需运行 H2 服务器。

com/zetcode/JavaSeH2Memory.java

  1. package com.zetcode;
  2. import java.sql.DriverManager;
  3. import java.sql.SQLException;
  4. import java.util.logging.Level;
  5. import java.util.logging.Logger;
  6. public class JavaSeH2Memory {
  7. public static void main(String[] args) {
  8. var url = "jdbc:h2:mem:";
  9. try (var con = DriverManager.getConnection(url);
  10. var stm = con.createStatement();
  11. var rs = stm.executeQuery("SELECT 1+1")) {
  12. if (rs.next()) {
  13. System.out.println(rs.getInt(1));
  14. }
  15. } catch (SQLException ex) {
  16. var lgr = Logger.getLogger(JavaSeH2Memory.class.getName());
  17. lgr.log(Level.SEVERE, ex.getMessage(), ex);
  18. }
  19. }
  20. }

该示例连接到 H2 内存数据库并执行查询。 创建仅用于一个连接的内存专用数据库。 与数据库的连接关闭时,数据库关闭。

  1. var url = "jdbc:h2:mem:";

该 URL 用于内存模式下的 H2 数据库。

建立数据库

在旧版本的 H2 中,如果数据库不存在,则会自动创建一个数据库。 由于安全原因,这不再可行。 在连接数据库之前,我们需要创建一个数据库。

  1. $ java -cp bin/h2-1.4.199.jar org.h2.tools.Shell
  2. Welcome to H2 Shell 1.4.199 (2019-03-13)
  3. Exit with Ctrl+C
  4. [Enter] jdbc:h2:mem:testdb
  5. URL jdbc:h2:~/tmp/h2dbs/testdb
  6. [Enter] org.h2.Driver
  7. Driver
  8. [Enter] sa
  9. User
  10. Password

可以使用 shell 工具创建一个名为testdb的新数据库。

启动 H2 服务器

现在我们将启动 H2 服务器。

  1. $ java -jar bin/h2-1.4.199.jar -baseDir ~/tmp/h2dbs
  2. Web Console server running at http://127.0.1.1:8082 (only local connections)
  3. TCP server running at tcp://127.0.1.1:9092 (only local connections)
  4. PG server running at pg://127.0.1.1:5435 (only local connections)

我们移至安装目录并在服务器模式下运行 H2。 该命令启动 Web 控制台应用和两个本地连接。 PG 服务器是具有 PostgreSQL 协议的 PostgreSQL 兼容模式。 生成数据库文件的目录设置为~/tmp/h2dbs,其中~表示主目录。

我们转到 Web 控制台,并使用jdbc:h2:~/tmp/h2dbs/testdb URL 连接到testdb数据库。 该数据库在~/tmp/h2dbs目录中生成。 默认用户为sa,未设置密码。

  1. ALTER USER sa SET PASSWORD 's$cret'

在控制台中,我们使用ALTER USER语句为用户sa设置密码。

cars_h2.sql

  1. CREATE TABLE cars(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), price INT);
  2. INSERT INTO cars(name, price) VALUES('Audi', 52642);
  3. INSERT INTO cars(name, price) VALUES('Mercedes', 57127);
  4. INSERT INTO cars(name, price) VALUES('Skoda', 9000);
  5. INSERT INTO cars(name, price) VALUES('Volvo', 29000);
  6. INSERT INTO cars(name, price) VALUES('Bentley', 350000);
  7. INSERT INTO cars(name, price) VALUES('Citroen', 21000);
  8. INSERT INTO cars(name, price) VALUES('Hummer', 41400);
  9. INSERT INTO cars(name, price) VALUES('Volkswagen', 21600);

这是创建cars表的 SQL。 我们在一个示例中使用此表。

H2 Maven 依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.h2database</groupId>
  4. <artifactId>h2</artifactId>
  5. <version>1.4.199</version>
  6. </dependency>
  7. </dependencies>

这是 H2 的 Maven 依赖关系。

Java H2 服务器示例

对于此示例,我们使用以下命令启动 H2 服务器:

  1. $ java -jar bin/h2-1.4.199.jar -baseDir ~/tmp/h2dbs

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  5. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  6. <modelVersion>4.0.0</modelVersion>
  7. <groupId>com.zetcode</groupId>
  8. <artifactId>javaseh2server</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <maven.compiler.source>11</maven.compiler.source>
  13. <maven.compiler.target>11</maven.compiler.target>
  14. </properties>
  15. <dependencies>
  16. <dependency>
  17. <groupId>com.h2database</groupId>
  18. <artifactId>h2</artifactId>
  19. <version>1.4.199</version>
  20. </dependency>
  21. </dependencies>
  22. <build>
  23. <plugins>
  24. <plugin>
  25. <groupId>org.codehaus.mojo</groupId>
  26. <artifactId>exec-maven-plugin</artifactId>
  27. <version>1.6.0</version>
  28. <configuration>
  29. <mainClass>com.zetcode.JavaSeH2Server</mainClass>
  30. </configuration>
  31. </plugin>
  32. </plugins>
  33. </build>
  34. </project>

POM 文件包含 H2 数据库引擎和用于使用 Maven 执行 Java 类的exec-maven-plugin

com/zetcode/JavaSeH2Server.java

  1. package com.zetcode;
  2. import java.sql.DriverManager;
  3. import java.sql.SQLException;
  4. import java.util.logging.Level;
  5. import java.util.logging.Logger;
  6. public class JavaSeH2Server {
  7. public static void main(String[] args) {
  8. var url = "jdbc:h2:tcp://localhost:9092/~/tmp/h2dbs/testdb";
  9. var user = "sa";
  10. var passwd = "s$cret";
  11. var query = "SELECT * FROM cars";
  12. try (var con = DriverManager.getConnection(url, user, passwd);
  13. var st = con.createStatement();
  14. var rs = st.executeQuery(query)) {
  15. while (rs.next()) {
  16. System.out.printf("%d %s %d%n", rs.getInt(1),
  17. rs.getString(2), rs.getInt(3));
  18. }
  19. } catch (SQLException ex) {
  20. var lgr = Logger.getLogger(JavaSeH2Server.class.getName());
  21. lgr.log(Level.SEVERE, ex.getMessage(), ex);
  22. }
  23. }
  24. }

该示例连接到 H2 服务器并执行查询。 它返回cars表中的所有行。

  1. var url = "jdbc:h2:tcp://localhost:9092/~/tmp/h2dbs/testdb";

这是用于连接到 H2 服务器的testdb数据库的 URL。

  1. $ mvn compile
  2. $ mvn -q exec:java
  3. 1 Audi 52642
  4. 2 Mercedes 57127
  5. 3 Skoda 9000
  6. 4 Volvo 29000
  7. 5 Bentley 350000
  8. 6 Citroen 21000
  9. 7 Hummer 41400
  10. 8 Volkswagen 21600

我们编译并运行该程序。

Java H2 教程展示了如何用 Java 编程 H2 数据库。 您可能也对 Derby 教程MySQL Java 教程RESTEasy H2 教程PostgreSQL Java 教程感兴趣。

列出所有 Java 教程