微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用ID更新或添加值

如何解决使用ID更新或添加值

我只是在学习sqlDelight,希望找到如何添加一个具有ID的对象(如果该对象不存在的话),然后使用给定的ID更新该当前对象。

当前,我要删除具有ID的当前对象,然后添加一个对象,并希望将其简化为一个简单的调用

我当前的代码

CREATE TABLE Color (
  id TEXT NOT NULL,name TEXT NOT NULL,hex TEXT NOT NULL
);

getColorWithId:
SELECT * FROM Color
WHERE id = ?;

saveColor:
INSERT OR REPLACE INTO Color (id,name,hex)
VALUES (?,?,?);

deleteColorWithId:
DELETE FROM Color
WHERE id = ?;

我希望将其更改为将saveColordeleteColorWithId替换为:

updateColorWithId:
INSERT OR REPLACE INTO Color (id,hex)
WHERE id = ?
VALUES (?,?);

但不适用于此错误<insert stmt values real> expected,got 'WHERE'

有人可以帮忙吗?我在文档中找不到任何内容

解决方法

您的语句saveColor用作UPSERT命令,并且完全可以按照您的要求工作。您无需创建其他语句。

INSERT OR REPLACE INTO Color (id,name,hex)
VALUES (?,?,?);

您必须在PRIMARY KEY列上指定id,并且可以将saveColor用作updateColorWithId

,

您已经在这里,尝试这样的事情:

检查记录是否存在。如果是这样,则进行更新,否则添加新行。根据文档使用命名的参数将是理想的。 https://cashapp.github.io/sqldelight/native_sqlite/query_arguments/

updateOrInsert:
IF EXISTS (SELECT 1 FROM Color WHERE id = :id) 
  BEGIN
    UPDATE Color
    SET id = :id,name = :name,hex = :hex
    WHERE id = :id 
  END
ELSE
  BEGIN
    INSERT INTO Color(id,hex)
    VALUES (:id,:name,:hex);
  END

用法

dbQuery.updateOrInsert(id = BGColor.id,name = bgColor.name,hex = bgColor.hex)

看看这可能有用REPLACE INTO vs Update

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。