Apache Empire-db 常用 CLI 命令与工具详解
汇总 Apache Empire-db 工程常用的 Maven 命令,以及 DBDatabase/DBTable/DBCommand/DBRecord/DBReader 等核心 API 与 DDL 生成工具的方法速查和命令行验证示例。
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> <全限定类名> 查看公开方法签名,或直接查阅类源码。