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

czq61nw1  于 2023-10-23  发布在  SQLite
关注(0)|答案(1)|浏览(107)

我在react native SQLite中有一个表,其中有两列app_name,key
我想更新一个值,如果它存在的基础上app_name else插入新的数据我尝试了以下操作

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');
                },
              );
            });

我无法得到任何输出。

a2mppw5e

a2mppw5e1#

SQLite通过ON CONFLICT子句支持UPSERT

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

我假设对于app_name,在表中定义了一个唯一的约束。
您必须检查您的android API级别使用的SQLite版本,因为UPSERT是在3.24.0版本中引入的
如果不使用UPSERT,你将不得不按以下顺序执行两条语句:

UPDATE client_registration 
SET key=? 
WHERE app_name = ?;

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

相关问题