CodeName One中使用SQLite的JSON1扩展出现语法错误如何解决?
CodeName One SQLite JSON1扩展问题解答
该问题并非你遗漏配置导致,而是当前CodeName One内置的SQLite运行库默认未启用JSON1扩展的编译支持。
原因说明
SQLite的JSON1属于可选功能扩展,需要在编译SQLite二进制文件时添加-DSQLITE_ENABLE_JSON1编译选项才会启用。你使用的SQLiteStudio默认已开启该扩展编译,所以相关查询可以正常执行;而CodeName One为了控制应用安装包体积,内置的SQLite库仅编译了核心功能,默认没有包含JSON1扩展,因此无法识别json_tree等扩展函数,就会抛出语法错误。
可选解决方案
- 方案一(推荐,适配成本最低):将JSON筛选逻辑迁移到Java层实现。先执行基础查询取出
textJSON字段的完整内容,再用CodeName One自带的JSON解析工具解析内容,筛选提取RunnerName对应的值即可,该方案兼容所有平台,无需修改原生配置,适合数据量不大的业务场景。 - 方案二(适合必须使用SQLite JSON查询能力的场景):自定义编译各平台的SQLite库。针对桌面模拟器、安卓、iOS等目标运行平台,分别编译添加了
-DSQLITE_ENABLE_JSON1选项的SQLite二进制文件,替换掉CodeName One默认内置的SQLite库即可,该方案需要处理各平台的原生编译适配,开发成本较高。
注意:即使你仅在模拟器环境测试,修改完桌面端SQLite库后,后续打包发布到移动端时,也需要对应替换移动端的SQLite库,否则移动端运行仍会出现相同报错。
内容的提问来源于stack exchange,提问作者stylsy
相关产品推荐
相关产品推荐

