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

我的sqlite3 CASE语句出了什么问题?

我的代码如下:

SELECT COUNT(_id) AS count FROM general WHERE _id = 1 CASE WHEN count > 0 THEN UPDATE general SET userGivenId = 'xxx' WHERE _id = 1 ELSE INSERT INTO general (userGivenId) VALUES ('xxx' ) END

错误

android.database.sqlite.sqliteException: near "CASE": Syntax error: , while compiling: SELECT COUNT(_id) AS count FROM general WHERE _id = 1 CASE WHEN count > 0 THEN UPDATE general SET userGivenId = 'xxx' WHERE _id = 1 ELSE INSERT INTO general (userGivenId) VALUES ('xxx' ) END

这是我将使用的最短查询.之所以这样做,是因为我的其他查询将包含需要更新的行,但有些行可能未被触及.使用replace将替换所有数据(至少这对我的Android手机有效).例如,我的File类将具有一个filePath,但是有时服务器的响应将返回null,并且如果服务器返回一个新的File,我只是要更新File.

我忘了写什么吗?

解决方法:

sqlite没有任何控制逻辑,因为这在嵌入式数据库中是没有意义的(没有单独的服务器机器/进程可以异步执行以提高性能).
CASE只能用于表达式,不能用于整个命令.

处理应用程序中的控制逻辑:

Cursor c = db.rawQuery("SELECT 1 FROM general WHERE _id = 1", null);
if (c.movetoFirst())
    db.execsql("UPDATE general SET userGivenId = 'xxx' WHERE _id = 1");
else
    db.execsql("INSERT INTO general (userGivenId) VALUES ('xxx')");

对于这些特定命令,如果您对_id列具有唯一约束(并且主键被约束为唯一),则可以使用INSERT OR REPLACE命令:

INSERT OR REPLACE INTO general(_id, userGivenId) VALUES(1, 'xxx')

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

相关推荐