Upsert方法的Android sqlite语法错误

时间:2018-07-10 13:19:08

标签: android sql sqlite

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

这是我的sqlite命令,用于在android中更新sqlite表。但是,它生成此错误: android.database.sqlite.SQLiteException:靠近“ ON”:语法错误(Sqlite代码1):,编译时

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

2 个答案:

答案 0 :(得分:2)

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

  

UPSERT是对INSERT的特殊语法添加,导致INSERT   如果INSERT违反了   唯一性约束。 UPSERT不是标准的SQL。 SQLite中的UPSERT   遵循PostgreSQL建立的语法。 UPSERT语法已添加   到SQLite版本3.24.0(2018-06-04)

SQL As Understood By SQLite - upsert

答案 1 :(得分:1)

  

我已经一遍又一遍地检查,但仍然找不到错误。 “开”有什么问题

“ on”没什么不对,只是SQLite标准(lib)没有冲突条款。

您将必须通过“ 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