我的代码如下:
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')
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!