外观
自定义表 ...common.data.PluginDbs
PluginKv 和 PluginRecords 都是表,但结构固定。要建自己的表(一份缓存、一张映射表),继承基座 PluginDb(open class,自己写建表 DDL):
| API | 签名 | 说明 |
|---|---|---|
PluginDbs.of(context, dbName, version, ddl) | fun of(context: Context, dbName: String, version: Int = 1, ddl: Array<String> = emptyArray()): PluginDb | 取该库名的基座实例(同名复用同一份连接) |
PluginDbs.close(dbName) | fun close(dbName: String) | 关掉该库的连接 |
PluginDbs.safeExec(db, tag, sql) | fun safeExec(db: SQLiteDatabase, tag: String, sql: String) | 执行建表 DDL 的兜底,失败只写日志不抛 |
库名默认取插件自己的包名(如 com.zhinian.plugin.aichat),实际路径 /data/data/<插件包名>/databases/<插件包名>,插件之间互不干扰。「缺什么补什么」:插件在老设备上装过很多历史版本,老库可能缺后加的表/列 —— 这里 onUpgrade / onOpen 都无条件重跑一遍全部 DDL(CREATE TABLE IF NOT EXISTS),已存在的表不动、数据不丢,缺的自动补上。不要只靠 version 递增 + onCreate