CentOS 8 安装 Apache Empire-db 指南

面向 CentOS 8 服务器,详解 Apache Empire-db 的 JDK 与 Maven 环境准备、Maven 依赖引入、基于 H2 内存库的最小 CRUD 示例编译运行与真实回显,以及卸载方法,全程命令均可复现。

Apache Empire-dbApache Empire-db2026/10/12

CentOS 8 安装 Apache Empire-db 指南

Apache Empire-db 是一款轻量级的关系型数据持久化框架,通过 DBDatabase/DBTable/DBColumn 构建类型安全的数据模型,并借助 DBCommand/DBReader/DBRecord 完成 SQL 生成与 CRUD 操作。它属于 Java 类库,没有独立的守护进程,所谓“安装”实为在工程中引入依赖并集成使用。本文在 CentOS 8 服务器上完成环境准备、依赖引入与最小可运行示例验证。

一、前置条件

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

CentOS 8 已进入维护期,官方源可能失效,需先将 dnf 源指向 vault 镜像(实测采用清华镜像),示例仓库配置如下:

cat > /etc/yum.repos.d/CentOS-Vault.repo <<'EOF'
[BaseOS]
name=CentOS 8 - BaseOS
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/8.5.2111/BaseOS/x86_64/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enabled=1
[AppStream]
name=CentOS 8 - AppStream
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/8.5.2111/AppStream/x86_64/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enabled=1
EOF
dnf clean all && dnf makecache

二、安装 JDK 与 Maven

2.1 安装 OpenJDK

CentOS 8 的 BaseOS/AppStream 源提供 OpenJDK 8/11/17,可按需安装:

dnf install -y java-1.8.0-openjdk-devel java-11-openjdk-devel java-17-openjdk-devel

2.2 安装 Maven

dnf install -y maven

2.3 版本验证

java -version
mvn -version

真实回显如下:

openjdk version "1.8.0_312"
Apache Maven 3.5.4 (Red Hat 3.5.4-5)

如需切换 JDK 版本,可使用 alternatives 列表查看并切换:

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、各数据库方言驱动等)

传递依赖(由 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] |  +- commons-beanutils:commons-beanutils:jar:1.9.3: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 编写主类

主流程依次完成:建立连接、执行建表 DDL、插入、查询、更新、删除。核心代码:

SampleDB db = new SampleDB();
DBDatabaseDriver driver = new DBDatabaseDriverH2();
Connection conn = DriverManager.getConnection("jdbc:h2:mem:sampledb;DB_CLOSE_DELAY=-1", "sa", "");
// Empire-db 默认以库标识作为 schema 前缀,H2 需先创建同名 schema
try (java.sql.Statement st = conn.createStatement()) {
    st.execute("CREATE SCHEMA IF NOT EXISTS sampledb");
}
db.open(driver, conn);

// 1) 生成并执行建表 DDL
DBSQLScript ddl = new DBSQLScript();
db.getCreateDDLScript(driver, ddl);
ddl.executeAll(driver, conn, false);

// 2) 插入
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);

// 3) 查询
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) 更新 / 删除:DBRecord.update(conn) / delete(conn)

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 8/11/17 下分别运行验证,回显一致。

五、卸载

dnf remove -y java-1.8.0-openjdk-devel java-11-openjdk-devel java-17-openjdk-devel maven

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

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

六、常见问题

Q1:编译报 package org.apache.empire.db does not exist? 未成功引入依赖。确认 pom.xml 中 empire-db 坐标正确,并执行 mvn dependency:tree 检查依赖是否解析成功。

Q2:运行报 No suitable driver found for jdbc:h2:...? 多为 JDBC 驱动缺失或版本不兼容。JDK 8 下应使用 H2 1.4.200(H2 2.x 需 JDK 11+)。

Q3:建表报 Schema "SAMPLEDB" not found? Empire-db 默认以 DBDatabase 标识作为 schema 前缀。在 H2 中先执行 CREATE SCHEMA IF NOT EXISTS sampledb,或通过 db.setSchema(...) 调整 schema。

Q4:如何指定 JDK 版本编译? 使用 JAVA_HOME 指向目标 JDK,例如 JAVA_HOME=/usr/lib/jvm/java-11-openjdk mvn clean compile。