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 は (明らかに) 使用しようとしている構文をサポートしていません。

基本的に 2 つのオプションがあります。

  • INSERT ステートメントでSQLite の「ON CONFLICT REPLACE」構文を 使用する

    • これには、一意の制約が必要です (この場合は、[名前] 列で)。
    • これにより、最初に古い行が削除され、次に新しい行が挿入されることに注意してください。

  • 削除/挿入が受け入れられない場合は、最初に更新を試み、更新カウントを取得し、それがゼロの場合は挿入を行う必要があります。
于 2013-09-19T18:29:20.373 に答える