CentOS 8 安装 Apache Empire-db 指南
面向 CentOS 8 服务器,详解 Apache Empire-db 的 JDK 与 Maven 环境准备、Maven 依赖引入、基于 H2 内存库的最小 CRUD 示例编译运行与真实回显,以及卸载方法,全程命令均可复现。
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 驱动连接具体数据库,常用可选驱动:
| 数据库 | 坐标 |
|---|---|
| H2 | com.h2database:h2:1.4.200 |
| Derby | org.apache.derby:derby:10.14.2.0 |
| SQLite | org.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。