Ubuntu 22.04 安装 Apache Empire-db 指南

面向 Ubuntu 22.04 服务器,讲解 Apache Empire-db 的 OpenJDK 与 Maven 环境搭建、Maven 依赖引入、基于 H2 内存库的最小 CRUD 示例编译运行与真实回显,并给出卸载与排错要点。

Apache Empire-dbApache Empire-db2026/10/12

Ubuntu 22.04 安装 Apache Empire-db 指南

Apache Empire-db 是一款关系型数据持久化框架,用 Java 代码而非字符串拼接来定义数据模型与 SQL,具备类型安全、易重构的特点。它以类库形式集成到工程中,没有独立的守护进程,因此“安装”指的是准备 JDK/Maven 环境并在 Maven 工程中引入依赖后使用。本文在 Ubuntu 22.04 服务器上完成环境准备、依赖引入与最小可运行示例的验证。

一、前置条件

  • 操作系统:Ubuntu 22.04 LTS(x86_64)。
  • 服务器已联网,可访问 Maven 中央仓库与 APT 镜像源。
  • 具备 root 权限;示例账号统一使用 root / q1w2e3r4。
  • 建议 JVM 堆内存设置为 256–512MB(示例使用 -Xmx512m)。

二、安装 JDK 与 Maven

2.1 安装 OpenJDK

Ubuntu 22.04 的 APT 源提供 OpenJDK 8/11/17,可一次安装:

apt-get update -y
apt-get install -y openjdk-8-jdk openjdk-11-jdk openjdk-17-jdk

实测提示:若系统缺少 /usr/share/binfmts 目录,update-alternatives 会报 error creating symbolic link '/usr/share/binfmts/jar.dpkg-tmp': No such file or directory, 导致 openjdk-*-jdk 配置失败。执行下面两步即可修复:

mkdir -p /usr/share/binfmts
dpkg --configure -a

2.2 安装 Maven

apt-get install -y maven

2.3 版本验证

java -version
mvn -version

真实回显如下:

openjdk version "17.0.20.1" 2026-08-18
Apache Maven 3.6.3

如需切换默认 JDK:

update-alternatives --config java

三、引入 Apache Empire-db 依赖

3.1 Maven 坐标清单

Empire-db 的经典 API 稳定版本位于 2.x 系列(本文以 2.5.1 为准):

坐标说明
org.apache.empire-db:empire-db:2.5.1核心库,含 DBDatabase/DBTable/DBCommand/方言驱动等
org.apache.empire-db:empire-db-jsf2:2.5.1可选,JSF2 集成扩展

传递依赖(由 Maven 自动引入):commons-beanutils、commons-logging、commons-collections、slf4j-api。

3.2 可选 JDBC 驱动

Empire-db 通过 JDBC 驱动连接数据库,常用可选驱动:

数据库坐标
H2com.h2database:h2:1.4.200
Derbyorg.apache.derby:derby:10.14.2.0
SQLiteorg.xerial:sqlite-jdbc:3.36.0.3

注意:H2 2.x 需要 JDK 11 及以上;在 JDK 8 下请使用 H2 1.4.200。

3.3 创建 Maven 工程

mkdir -p /root/empiredb-demo/src/main/java/demo

pom.xml 内容:

<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.example</groupId>
  <artifactId>empiredb-demo</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.apache.empire-db</groupId>
      <artifactId>empire-db</artifactId>
      <version>2.5.1</version>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>1.4.200</version>
    </dependency>
  </dependencies>
</project>

下载依赖并查看依赖树:

mvn -q dependency:copy-dependencies -DoutputDirectory=lib
mvn dependency:tree

真实回显(节选):

[INFO] com.example:empiredb-demo:jar:1.0.0
[INFO] +- org.apache.empire-db:empire-db:jar:2.5.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.33:compile
[INFO] \- com.h2database:h2:jar:1.4.200:compile
[INFO] BUILD SUCCESS

四、最小 CRUD 示例

4.1 定义数据模型

在 demo 包下创建 EmpireDbDemo.java,模型类继承 DBDatabase 并声明 EMPLOYEES 表:

public static class SampleDB extends DBDatabase {
    private static final long serialVersionUID = 1L;
    public final DBTable       EMPLOYEES;
    public final DBTableColumn EMP_ID, EMP_NAME, EMP_DEPT, EMP_SALARY;

    public SampleDB() {
        super("sampledb");
        EMPLOYEES  = new DBTable("EMPLOYEES", this);
        EMP_ID     = EMPLOYEES.addColumn("ID",     DataType.AUTOINC, 0,    DataMode.AutoGenerated, null);
        EMP_NAME   = EMPLOYEES.addColumn("NAME",   DataType.TEXT,    80,   DataMode.NotNull,       null);
        EMP_DEPT   = EMPLOYEES.addColumn("DEPT",   DataType.TEXT,    40,   DataMode.Nullable,      null);
        EMP_SALARY = EMPLOYEES.addColumn("SALARY", DataType.DECIMAL, 10.2, DataMode.Nullable,      null);
        EMPLOYEES.setPrimaryKey(EMP_ID);
    }
}

4.2 编写主类

主流程依次完成:建立连接、建表、插入、查询、更新、删除:

SampleDB db = new SampleDB();
DBDatabaseDriver driver = new DBDatabaseDriverH2();
Connection conn = DriverManager.getConnection("jdbc:h2:mem:sampledb;DB_CLOSE_DELAY=-1", "sa", "");
try (java.sql.Statement st = conn.createStatement()) {
    st.execute("CREATE SCHEMA IF NOT EXISTS sampledb");
}
db.open(driver, conn);

DBSQLScript ddl = new DBSQLScript();
db.getCreateDDLScript(driver, ddl);
ddl.executeAll(driver, conn, false);

DBRecord rec = new DBRecord();
db.EMPLOYEES.createRecord(rec, conn);
rec.setValue(db.EMP_NAME, "Alice");
rec.setValue(db.EMP_DEPT, "R&D");
rec.setValue(db.EMP_SALARY, new BigDecimal("12000.50"));
rec.update(conn);

DBCommand q = db.createCommand();
q.select(db.EMP_ID, db.EMP_NAME, db.EMP_DEPT, db.EMP_SALARY);
q.where(db.EMP_SALARY.isGreaterThan(new BigDecimal("10000")));
q.orderBy(db.EMP_ID);
DBReader reader = new DBReader();
reader.open(q, conn);
while (reader.moveNext()) {
    System.out.println(reader.getValue(0) + "\t" + reader.getValue(1)
        + "\t" + reader.getValue(2) + "\t" + reader.getValue(3));
}
reader.close();

4.3 编译运行与真实回显

mvn -q compile
LANG=C.UTF-8 java -Xmx512m -Dfile.encoding=UTF-8 -cp "target/classes:lib/*" demo.EmpireDbDemo

真实回显如下:

Empire-db 版本: 2.5.1

== 1. 生成建表 DDL 并执行 ==
-- creating table EMPLOYEES --
CREATE TABLE sampledb.EMPLOYEES (
   ID INT AUTO_INCREMENT NOT NULL,
   NAME VARCHAR(80) NOT NULL,
   DEPT VARCHAR(40),
   SALARY DECIMAL(10,2),
 PRIMARY KEY (ID))

== 2. 插入 INSERT ==
已插入: ID=1 NAME=Alice DEPT=R&D SALARY=12000.50
已插入: ID=2 NAME=Bob DEPT=Sales SALARY=9000.00
已插入: ID=3 NAME=Carol DEPT=R&D SALARY=15000.75
插入后总行数: 3

== 3. 查询 SELECT (SALARY > 10000, 按 ID 升序) ==
ID      NAME    DEPT    SALARY
1       Alice   R&D     12000.50
3       Carol   R&D     15000.75
命中行数: 2

== 4. 更新 UPDATE (Bob 调薪 + 转岗) ==
更新后: ID=2 NAME=Bob DEPT=R&D SALARY=11000.00

== 5. 删除 DELETE (Carol 离职) ==
删除 ID=3 后总行数: 2

== 6. 参数绑定查询 (DBCmdParam) ==
R&D 部门成员: Alice Bob

完成: Empire-db CRUD 闭环验证通过。

在 JDK 17/11/8 下分别运行,回显一致。

五、卸载

apt-get remove -y openjdk-8-jdk openjdk-11-jdk openjdk-17-jdk maven
apt-get autoremove -y

Empire-db 作为 Maven 依赖,无系统级安装,删除工程目录或清理本地仓库缓存即可:

rm -rf /root/empiredb-demo
rm -rf ~/.m2/repository/org/apache/empire-db

六、常见问题

Q1:apt-get install 后 java 命令仍不可用? 可能是 JDK 包因 update-alternatives 失败而未完成配置。执行 mkdir -p /usr/share/binfmts && dpkg --configure -a 修复后重试。

Q2:编译报找不到 org.apache.empire.db 包? 依赖未成功引入,确认 pom.xml 坐标并执行 mvn dependency:tree 检查。

Q3:运行报 No suitable driver found? 缺少 JDBC 驱动或版本不兼容;JDK 8 下请使用 H2 1.4.200。

Q4:建表报 Schema "SAMPLEDB" not found? Empire-db 默认把 DBDatabase 标识作为 schema 前缀,需先 CREATE SCHEMA IF NOT EXISTS sampledb,或用 db.setSchema(...) 调整。