如何在 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 支持 UPSERT
和 ON 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 (?, ?);
我有一个 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 支持 UPSERT
和 ON 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 (?, ?);