原文:http://zetcode.com/java/h2database/
Java H2 教程展示了如何使用 Java 在 H2 中进行数据库编程。
H2 是用 Java 编写的关系数据库管理系统。 它可以嵌入 Java 应用中或以客户端-服务器模式运行。 也可以在存储模式下使用。
H2 的占地面积很小。 它带有一个称为 H2 控制台的基于浏览器的管理应用。
下载 H2
从 H2 的主页,我们以 ZIP 文件下载数据库。
$ unzip h2-2019-03-13.zip
我们解压缩档案。
$ mv h2 ~/bin/
我们将安装目录移动到我们选择的目标位置。
Java H2 内存示例
在第一个示例中,我们连接到内存中的 H2 数据库。 在此示例中,无需运行 H2 服务器。
com/zetcode/JavaSeH2Memory.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 内存数据库并执行查询。 创建仅用于一个连接的内存专用数据库。 与数据库的连接关闭时,数据库关闭。
var url = "jdbc:h2:mem:";
该 URL 用于内存模式下的 H2 数据库。
建立数据库
在旧版本的 H2 中,如果数据库不存在,则会自动创建一个数据库。 由于安全原因,这不再可行。 在连接数据库之前,我们需要创建一个数据库。
$ java -cp bin/h2-1.4.199.jar org.h2.tools.ShellWelcome to H2 Shell 1.4.199 (2019-03-13)Exit with Ctrl+C[Enter] jdbc:h2:mem:testdbURL jdbc:h2:~/tmp/h2dbs/testdb[Enter] org.h2.DriverDriver[Enter] saUserPassword
可以使用 shell 工具创建一个名为testdb的新数据库。
启动 H2 服务器
现在我们将启动 H2 服务器。
$ java -jar bin/h2-1.4.199.jar -baseDir ~/tmp/h2dbsWeb 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,未设置密码。
ALTER USER sa SET PASSWORD 's$cret'
在控制台中,我们使用ALTER USER语句为用户sa设置密码。
cars_h2.sql
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 依赖
<dependencies><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.199</version></dependency></dependencies>
这是 H2 的 Maven 依赖关系。
Java H2 服务器示例
对于此示例,我们使用以下命令启动 H2 服务器:
$ java -jar bin/h2-1.4.199.jar -baseDir ~/tmp/h2dbs
pom.xml
<?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.0http://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
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表中的所有行。
var url = "jdbc:h2:tcp://localhost:9092/~/tmp/h2dbs/testdb";
这是用于连接到 H2 服务器的testdb数据库的 URL。
$ mvn compile$ mvn -q exec:java1 Audi 526422 Mercedes 571273 Skoda 90004 Volvo 290005 Bentley 3500006 Citroen 210007 Hummer 414008 Volkswagen 21600
我们编译并运行该程序。
Java H2 教程展示了如何用 Java 编程 H2 数据库。 您可能也对 Derby 教程, MySQL Java 教程, RESTEasy H2 教程和 PostgreSQL Java 教程感兴趣。
列出所有 Java 教程。
