如何在 Capacitor 中使用自定义 SQLite 扩展
标准的 SQLite 可以满足大多数任务需求。但有时,您需要更强大的功能。
您可能需要针对特定语言的自定义分词器(tokenizer)。您可能需要自定义数学函数或特殊的文本处理功能。这些被称为可加载扩展(loadable extensions)。
Capacitor SQLite 插件在 Android 和 iOS 上都支持这些功能。
为什么要使用扩展?
- 自定义 FTS5 分词器:控制文本在搜索时的拆分方式。
- 自定义 SQL 函数:在靠近数据的地方运行复杂的逻辑。
实现方式因平台而异。
Android
Android 系统自带的 SQLite 不支持直接加载扩展。您必须使用 requery 后端。
- 在
variables.gradle文件中启用requery选项。 - 在
build.gradle文件中添加 JitPack 仓库。 - 将您的 C 代码编译为针对每种 CPU 架构的原生库(.so 文件)。
- 将这些文件放入
jniLibs文件夹中。 - 在打开数据库时使用
androidExtensions选项。
iOS
iOS 应用无法在运行时加载动态库。您必须静态链接您的扩展。
- 将您的 C 源文件添加到 Xcode 项目中。
- 为该文件设置
-DSQLITE_CORE编译器标志。 - 在您的桥接头文件(bridging header)中声明
init函数。 - 在
AppDelegate中使用sqlite3_auto_extension注册扩展。
扩展的 C 代码保持不变。改变的只是构建和注册步骤。
一旦加载,您的自定义扩展就像内置的 SQLite 功能一样工作。您可以立即在 SQL 语句中使用新的分词器或函数。
自定义扩展让您能够在移动数据库中使用原生代码的力量。
来源:https://dev.to/capawesome/how-to-use-custom-sqlite-extensions-in-capacitor-l5k