Apache Empire-db 常用 CLI 命令与工具详解

汇总 Apache Empire-db 工程常用的 Maven 命令,以及 DBDatabase/DBTable/DBCommand/DBRecord/DBReader 等核心 API 与 DDL 生成工具的方法速查和命令行验证示例。

Apache Empire-dbApache Empire-db2026/10/12

Apache Empire-db 常用 CLI 命令与工具详解

Apache Empire-db 是类库,没有独立的命令行工具,日常“命令”主要来自 Maven 构建与依赖管理,以及 Java 层面的 API 调用。本文汇总常用 Maven 命令、DDL 生成工具与核心 API 速查,并给出可直接复现的命令行验证示例(以 2.5.1 为准)。

一、Maven 常用命令

命令作用
mvn dependency:tree查看依赖树,确认 empire-db 是否引入
mvn dependency:copy-dependencies -DoutputDirectory=lib把依赖复制到 lib/ 目录,便于手工运行
mvn compile编译
mvn -q compile安静模式编译
mvn package打包
mvn clean package -DskipTests清理后打包并跳过测试
mvn dependency:resolve解析并下载全部依赖
JAVA_HOME=/usr/lib/jvm/java-11-openjdk mvn clean compile指定 JDK 编译

依赖树实测回显(节选):

[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] |  |  +- commons-logging:commons-logging:jar:1.2:compile
[INFO] |  |  \- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.33:compile
[INFO] \- com.h2database:h2:jar:1.4.200:compile
[INFO] BUILD SUCCESS

二、DDL 生成工具

2.1 DBSQLScript

DBSQLScript 承载一批 SQL 语句(DDL 或 DML),提供生成、浏览与执行能力:

方法说明
getCreateDDLScript(driver, script)(在 DBDatabase 上)依据模型与方言生成建表脚本
addStmt(String) / addStmt(String, Object[])追加语句 / 带参语句
addInsert/Update/Delete(...)由 DBCommand 追加 DML
getCount() / getStmt(int)语句数量 / 取语句
executeAll(driver, conn) / executeAll(driver, conn, ignoreErrors)顺序执行全部语句
executeBatch(driver, conn)批量执行
toString() / 迭代器文本预览与遍历

示例:

DBSQLScript script = new DBSQLScript();
db.getCreateDDLScript(driver, script);
for (String stmt : script) System.out.println(stmt);
script.executeAll(driver, conn, false);

2.2 DBDDLGenerator

DBDDLGenerator 是 DDL 生成器的抽象基类(由各数据库驱动使用),负责把列类型映射为方言类型(如 DATATYPE_INTEGER、DATATYPE_DECIMAL、DATATYPE_BLOB),并控制主键约束命名等细节。通常无需直接使用,通过 DBDatabase.getCreateDDLScript(...) 即可间接调用。

三、DBDatabase 常用方法速查

方法说明
createCommand()创建 DBCommand
getTable(String) / getTables()取表
open(driver, conn) / close(conn)绑定/解绑连接
commit(conn) / rollback(conn)提交 / 回滚
getCreateDDLScript(driver, script)生成 DDL
executeSQL(...) / executeUpdate / executeInsert / executeDelete执行 DML
querySingleValue/Int/Long/String(cmd, conn)单值查询
queryObjectList(cmd, conn)多行对象数组查询

四、DBTable / DBColumn 常用方法速查

DBTable:

方法说明
addColumn(name, DataType, size, DataMode, defValue)添加列
setPrimaryKey(DBColumn...)主键
addIndex(name, DBIndexType, DBColumn...)索引(STANDARD/UNIQUE/UNIQUE_ALLOW_NULL)
createRecord(DBRecord, conn)初始化记录
readRecord(DBRecord, Object[], conn)按键读取
deleteRecord(Object[], conn)按键删除
count()计数列表达式
getKeyColumns() / getColumns()主键列 / 全部列

DBColumn / DBTableColumn:

方法说明
getDataType() / getSize()类型 / 长度
isRequired() / isAutoGenerated() / isReadOnly()属性探测
setDefaultValue(Object) / setRequired(boolean)设置默认值 / 必填
referenceOn(DBTableColumn)外键引用
is(Object) / isNot(Object) / isGreaterThan(Object)比较条件表达式

五、DBCommand / DBQuery 常用方法速查

DBCommand:

方法说明
select(DBColumnExpr...)指定查询列
where(DBCompareExpr...)条件
orderBy(DBColumnExpr...)排序
groupBy(...) / having(...)分组 / 分组过滤
join(...)表连接
set(DBSetExpr)更新赋值
addParam([DataType,] Object)添加参数
getSelect() / getInsert() / getUpdate() / getDelete(table)生成 SQL 文本
getParamValues()参数值
clear() / clearWhere() 等重置

DBQuery:以 DBCommandExpr 构造的派生行集(可理解为子查询/视图式行集),extends DBRowSet,提供 getCommandExpr()、getName()、getAlias();可像表一样参与 select/join。

DBQuery q = new DBQuery(cmd, alias);         // 由命令构造派生行集
DBCommand q2 = db.createCommand();
q2.select(q.getColumn(0));

六、DBRecord / DBReader 常用方法速查

DBRecord:

方法说明
create(DBRowSet, conn)准备新增记录
read(DBRowSet, Object, conn)按键读取(主键单值或值数组)
setValue(Column, Object) / getValue(int)赋值 / 取值
update(conn)更新(新记录时执行插入)
delete(conn)删除
isNew() / isModified() / isExists()状态探测

DBReader:

方法说明
open(DBCommandExpr, conn)打开结果集
moveNext()移动到下一行
getValue(int) / getString(int) / getInt(int)取值
getFieldIndex(String)按列名取索引
close()关闭

七、命令行验证示例

以 H2 内存库为例,编译并运行一个 CRUD 程序:

# 1) 下载依赖到 lib/
mvn -q dependency:copy-dependencies -DoutputDirectory=lib

# 2) 编译
mvn -q compile

# 3) 运行(堆内存限制 512MB)
LANG=C.UTF-8 java -Xmx512m -Dfile.encoding=UTF-8 \
    -cp "target/classes:lib/*" demo.EmpireDbDemo

真实回显(节选):

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

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

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

探索 API 的常用工具命令:

# 列出 jar 中的类
jar tf lib/empire-db-2.5.1.jar | grep "org/apache/empire/db/DB"

# 查看某类的公开方法签名
javap -cp lib/empire-db-2.5.1.jar org.apache.empire.db.DBTable

八、常见问题

Q1:java -cp "target/classes:lib/*" 报找不到主类? 确认已 mvn compile 生成 target/classes,且主类全限定名正确(如 demo.EmpireDbDemo)。

Q2:有多份同版本 jar 冲突? dependency:copy-dependencies 不会自动清理旧文件,切换版本后建议先清空 lib/ 再复制。

Q3:如何快速了解某个类的可用方法? 使用 javap -cp <jar> <全限定类名> 查看公开方法签名,或直接查阅类源码。