upsert方法的Android sqlite语法错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了upsert方法的Android sqlite语法错误相关的知识,希望对你有一定的参考价值。

INSERT INTO RefreshTokens(name, token) VALUES('googleFit', '1/ZxDpwJIxIYQb7TtxPMuYFpIoeE0urHd6LL3dY57ghsA') ON CONFLICT(name) DO UPDATE SET token=excluded.token;

这是我的sqlite命令在android中upsert sqlite表。但是,它正在生成此错误:android.database.sqlite.SQLiteException:near“ON”:语法错误(Sqlite代码1):,同时编译

我一遍又一遍地检查,仍然无法找到错误。 “开”有什么问题?

答案

问题很可能是UPSERT语法最近才被添加,因此您正在使用的SQLite版本不支持,如下所示: -

UPSERT是INSERT的一种特殊语法添加,如果INSERT违反唯一性约束,则会导致INSERT表现为UPDATE或no-op。 UPSERT不是标准SQL。 SQLite中的UPSERT遵循PostgreSQL建立的语法。 UPSERT语法已添加到SQLite版本3.24.0(2018-06-04)。

SQL As Understood By SQLite - upsert

另一答案

我一遍又一遍地检查,仍然无法找到错误。 “开”有什么问题

“on”没有任何问题,只是SQLite标准(lib)没有Conflict Clause。

您必须通过'ContentValues'运行冲突子句查询,如下所示

ContentValues args = new ContentValues();
args.put("name", name);
args.put("token", token);
database.insertWithOnConflict("table_name", "name", args, SQLiteDatabase.CONFLICT_REPLACE)

看看以下链接,它会帮助你。

SQLite Android Official

Link 2

Android Sample App

以上是关于upsert方法的Android sqlite语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Android 房间持久性库:Upsert

SQLite 插入 - 重复键更新 (UPSERT)

如何使用柴油在 sqlite 中进行 upsert?

为啥 UPSERT 执行 DELETE 和 INSERT 而不是 UPDATE (SQLite)

SQLite UPSERT / 更新或插入

android SQLite数据库总结