💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Java H2 教程 原文:http://zetcode.com/java/h2database/ Java H2 教程展示了如何使用 Java 在 H2 中进行数据库编程。 H2 是用 Java 编写的关系数据库管理系统。 它可以嵌入 Java 应用中或以客户端-服务器模式运行。 也可以在存储模式下使用。 H2 的占地面积很小。 它带有一个称为 H2 控制台的基于浏览器的管理应用。 ## 下载 H2 从 H2 的主页,我们以 ZIP 文件下载数据库。 ```java $ unzip h2-2019-03-13.zip ``` 我们解压缩档案。 ```java $ mv h2 ~/bin/ ``` 我们将安装目录移动到我们选择的目标位置。 ## Java H2 内存示例 在第一个示例中,我们连接到内存中的 H2 数据库。 在此示例中,无需运行 H2 服务器。 `com/zetcode/JavaSeH2Memory.java` ```java package com.zetcode; import java.sql.DriverManager; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; public class JavaSeH2Memory { 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(JavaSeH2Memory.class.getName()); lgr.log(Level.SEVERE, ex.getMessage(), ex); } } } ``` 该示例连接到 H2 内存数据库并执行查询。 创建仅用于一个连接的内存专用数据库。 与数据库的连接关闭时,数据库关闭。 ```java var url = "jdbc:h2:mem:"; ``` 该 URL 用于内存模式下的 H2 数据库。 ## 建立数据库 在旧版本的 H2 中,如果数据库不存在,则会自动创建一个数据库。 由于安全原因,这不再可行。 在连接数据库之前,我们需要创建一个数据库。 ```java $ java -cp bin/h2-1.4.199.jar org.h2.tools.Shell Welcome to H2 Shell 1.4.199 (2019-03-13) Exit with Ctrl+C [Enter] jdbc:h2:mem:testdb URL jdbc:h2:~/tmp/h2dbs/testdb [Enter] org.h2.Driver Driver [Enter] sa User Password ``` 可以使用 shell 工具创建一个名为`testdb`的新数据库。 ## 启动 H2 服务器 现在我们将启动 H2 服务器。 ```java $ java -jar bin/h2-1.4.199.jar -baseDir ~/tmp/h2dbs Web Console server running at http://127.0.1.1:8082 (only local connections) TCP server running at tcp://127.0.1.1:9092 (only local connections) 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`,未设置密码。 ```java ALTER USER sa SET PASSWORD 's$cret' ``` 在控制台中,我们使用`ALTER USER`语句为用户`sa`设置密码。 `cars_h2.sql` ```java 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。 我们在一个示例中使用此表。 ## H2 Maven 依赖 ```java <dependencies> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> </dependency> </dependencies> ``` 这是 H2 的 Maven 依赖关系。 ## Java H2 服务器示例 对于此示例,我们使用以下命令启动 H2 服务器: ```java $ java -jar bin/h2-1.4.199.jar -baseDir ~/tmp/h2dbs ``` `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>javaseh2server</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <configuration> <mainClass>com.zetcode.JavaSeH2Server</mainClass> </configuration> </plugin> </plugins> </build> </project> ``` POM 文件包含 H2 数据库引擎和用于使用 Maven 执行 Java 类的`exec-maven-plugin`。 `com/zetcode/JavaSeH2Server.java` ```java package com.zetcode; import java.sql.DriverManager; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; public class JavaSeH2Server { public static void main(String[] args) { var url = "jdbc:h2:tcp://localhost: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(JavaSeH2Server.class.getName()); lgr.log(Level.SEVERE, ex.getMessage(), ex); } } } ``` 该示例连接到 H2 服务器并执行查询。 它返回`cars`表中的所有行。 ```java var url = "jdbc:h2:tcp://localhost:9092/~/tmp/h2dbs/testdb"; ``` 这是用于连接到 H2 服务器的`testdb`数据库的 URL。 ```java $ mvn compile $ mvn -q exec:java 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 数据库。 您可能也对 [Derby 教程](/db/apachederbytutorial), [MySQL Java 教程](/db/mysqljava/), [RESTEasy H2 教程](/jaxrs/resteasyh2/)和 [PostgreSQL Java 教程](/db/postgresqljavatutorial/)感兴趣。 列出[所有 Java 教程](/all/#java)。