如何在 react native sqlite 数据库中使用 upsert

how to use upsert in react native sqlite database

我有一个 table 反应本机 SQLite 与 2 列 app_name,key

我想根据 app_name 更新一个值(如果它存在),否则插入新数据 我尝试了以下方法

 db.transaction(function (tx) {
              tx.executeSql(
                'Insert or Ignore Into client_registration (app_name, key) values(?,?); UPDATE client_registration SET app_name=?, key=? where changes() = 0 and "app_name" = ?;',
                ['coin', 123],
                (tx, results) => {
                  if (results.rowsAffected > 0) {
                   console.log('success')
                    );
                  } else console.log('Registration Failed');
                },
              );
            }); 

我无法获得任何输出。

SQLite 支持 UPSERTON CONFLICT 子句:

INSERT INTO client_registration(app_name, key) VALUES (?, ?)
ON CONFLICT(app_name) DO UPDATE
SET key = EXCLUDED.key;

我假设 app_name 在 table 中定义了一个唯一约束。

您必须检查您的 android API 级别使用的 SQLite 版本,因为 UPSERT 是在版本 3.24.0

中引入的

如果不使用 UPSERT,您将必须按以下顺序执行 2 个语句:

UPDATE client_registration 
SET key=? 
WHERE app_name = ?;

INSERT OR IGNORE INTO client_registration(app_name, key) VALUES (?, ?);