react-native - 如何在反应原生sqlite数据库中使用upsert
问题描述
我在本机 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
表中定义了一个唯一的约束。
您必须检查您的 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 (?, ?);
推荐阅读
- c# - 引导警报显示在 asp.net 中的页面加载时
- angularjs - 如何在角度电话猫中运行量角器测试?
- ruby - Ruby - 无法使用数组整数执行计算
- java - 如何在 Android 中水平滚动 ImageView?
- json - MariaDB JSON_SEARCH 函数不适用于变量
- django-rest-framework - 令牌认证后Django Rest Framework注销不起作用
- javascript - 如何在 html 表中动态创建带有 div 类的输入元素?
- nginx - Kubernetes集群中的Nginx微服务网关配置
- php - 如何以 JSON 格式编码 mysql 数据?
- apache - apache mod_rewrite 让我们加密不重定向