Skip to content

自定义表 ...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