在Expo运行的SQLite中执行UPSERT出现语法错误如何解决
问题根因
- 你的
INSERT ... ON CONFLICT语法本身完全符合SQLite官方规范,报错和反引号、单行/多行排版没有关系,核心原因是你当前使用的SQLite版本低于3.24.0:UPSERT特性是SQLite在2018年6月发布的3.24.0版本才正式支持的,低于该版本的运行环境无法识别该语法,就会抛出near "on": syntax error的报错。
修复方案
- 先执行命令
SELECT sqlite_version();确认当前环境的SQLite版本,若版本低于3.24.0优先升级SQLite到最新稳定版即可解决问题。 - 若无法升级SQLite版本,可以用传统的原子化两步写法替代UPSERT实现相同逻辑:
-- 先尝试更新对应key的value UPDATE setup SET value = ? WHERE key = ?; -- 若更新行数为0,说明key不存在,执行插入 INSERT INTO setup (key, value) SELECT ?, ? WHERE changes() = 0;
- 如果是在安卓等内置旧版本SQLite的环境运行,安卓10及以上系统自带的SQLite版本才支持UPSERT语法,低版本安卓可以引入第三方SQLite库替换系统内置版本,或者直接使用上述替代方案。
内容的提问来源于stack exchange,提问作者Archimedes Trajano
相关产品推荐
相关产品推荐

