0

我对 android Api 有一个大问题。我正在尝试在 SQL 数据库中插入一些值,如果密钥已经存在,我想更新。

通常使用 SQL 没问题,但 android 总是抛出错误。

我的代码:

"IF EXISTS (SELECT * FROM "+table+" WHERE Name='"+key+"')" +
" UPDATE "+table+" SET (Value='"+Value+"') WHERE Name='"+key+"'" +
" ELSE" +
" INSERT INTO Table1 (Name,Value) VALUES ('"+key+"','"+Value+"')";

我总是得到的错误:

09-19 19:56:46.311: E/AndroidRuntime(32454): Caused by:      
android.database.sqlite.SQLiteException: near "CASE": syntax error (code 1): , while compiling: CASE WHEN EXISTS (SELECT * FROM Settings WHERE Name='AppVersion')THEN UPDATE Settings SET (Value='0.5 beta') WHERE Name='AppVersion'ELSE INSERT INTO Table1 (Name,Value) VALUES ('AppVersion','0.5 beta')`

我也尝试过使用“CASE”,但它也不起作用。

"CASE WHEN EXISTS (SELECT * FROM "+table+" WHERE Name='"+key+"')" +
"THEN UPDATE "+table+" SET (Value='"+Value+"') WHERE Name='"+key+"'" +
"ELSE INSERT INTO Table1 (Name,Value) VALUES ('"+key+"','"+Value+"')";

请任何人告诉我它是如何工作的。

PS.:抱歉英语不好。

4

1 回答 1

0

SQLite(显然)不支持您尝试使用的语法。

基本上有两种选择:

  • 在 INSERT 语句中 使用 SQLite 的“ ON CONFLICT REPLACE ”语法

    • 这需要一个唯一的约束(在这种情况下,在“名称”列上)。
    • 请注意,这将首先删除旧行,然后插入新行。

  • 如果您无法接受删除/插入,那么您可能不得不先尝试更新,获取更新计数,如果为零,请执行插入。
于 2013-09-19T18:29:20.373 回答