使用 id 更新或添加值
Update or add value with 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 = ?;
我希望将其更改为用类似以下内容替换 saveColor
和 deleteColorWithId
:
updateColorWithId:
INSERT OR REPLACE INTO Color (id, name, hex)
WHERE id = ?
VALUES (?, ?, ?);
但它不适用于此错误 <insert stmt values real> expected, got 'WHERE'
有人可以帮忙吗?我在文档中找不到任何内容。
你已经在那里了,尝试这样的事情:
检查记录是否存在。如果是,则更新,否则添加新行。根据文档使用命名参数是理想的。 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, name, hex)
VALUES (:id, :name, :hex);
END
用法
dbQuery.updateOrInsert(id = BGColor.id, name = bgColor.name, hex = bgColor.hex)
看看这个,可能会有用REPLACE INTO vs Update
您的语句 saveColor
用作 UPSERT 命令,它完全按照您的意愿工作。您不需要创建另一个语句。
INSERT OR REPLACE INTO Color (id, name, hex)
VALUES (?, ?, ?);
您必须在 id
列上指定 PRIMARY KEY
,您可以将 saveColor
用作 updateColorWithId
。
我刚刚在学习 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 = ?;
我希望将其更改为用类似以下内容替换 saveColor
和 deleteColorWithId
:
updateColorWithId:
INSERT OR REPLACE INTO Color (id, name, hex)
WHERE id = ?
VALUES (?, ?, ?);
但它不适用于此错误 <insert stmt values real> expected, got 'WHERE'
有人可以帮忙吗?我在文档中找不到任何内容。
你已经在那里了,尝试这样的事情:
检查记录是否存在。如果是,则更新,否则添加新行。根据文档使用命名参数是理想的。 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, name, hex)
VALUES (:id, :name, :hex);
END
用法
dbQuery.updateOrInsert(id = BGColor.id, name = bgColor.name, hex = bgColor.hex)
看看这个,可能会有用REPLACE INTO vs Update
您的语句 saveColor
用作 UPSERT 命令,它完全按照您的意愿工作。您不需要创建另一个语句。
INSERT OR REPLACE INTO Color (id, name, hex)
VALUES (?, ?, ?);
您必须在 id
列上指定 PRIMARY KEY
,您可以将 saveColor
用作 updateColorWithId
。