Java H2 教程

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

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

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

下载 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.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 -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,未设置密码。

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.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

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: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

我们编译并运行该程序。

赞(1)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Java 教程