2011-10-24 12 views
0

データ(アイテムと値)のペアをダウンロードするコードがあります。値は時間の経過とともに変更されるため、コード内に更新機能があります。問題は、mDb.updateは、コードが正常に実行されてテーブルが作成された後でも(常に値がアプリケーションに表示されるため)、[c]の名前が "Android"の場合でも、 :SQLの一貫したエラースローエラー

android.database.sqlite.SQLiteException:いいえそのような列:Android:コンパイル中:UPDATE ThemeFavorites SET Favorites =?私をバッフル何名=アンドロイド

が、それはコードではなくKEY_NAME欄より、アンドロイドという名前の列を探して表示されていることであるWHERE ...誰もがいくつかの光を当てることができますか?

public void updateFavoritesValue(String[] names, String[] values) { 
    int c = 0; 
    while (c< names.length) { 
     ContentValues initialValues = new ContentValues(); 

     initialValues.put(KEY_FAVORITES_VALUE, values[c]); 
     try { 
      mDb.update(TABLE_THEME_FAVORITES, initialValues, KEY_NAME + "=" + names[c], null); 
      // TODO this always flags exception :(

     } catch (Exception e) { // Table isn't populated yet, must insert new row 
      initialValues.put(KEY_NAME, names[c]); 
      initialValues.put(KEY_USER_FAVORITE, "No"); 
      mDb.insert(TABLE_THEME_FAVORITES, null, initialValues); 
     } 
     c++; 
    } 
} 

私のテーブル作成コード念

public static final String KEY_NAME = "Name"; 
private static final String TABLE_THEME_FAVORITES = "ThemeFavorites"; 
public static final String KEY_FAVORITES_VALUE = "Favorites"; 
public static final String KEY_USER_FAVORITE = "UserFavorite"; 

private static final String DATABASE_CREATE_THEME_FAVORITES = "create table " + TABLE_THEME_FAVORITES + " (" 
+ KEY_ROWID + " integer primary key autoincrement, " 
+ KEY_NAME + " text not null, " 
+ KEY_USER_FAVORITE + " text not null, " 
+ KEY_FAVORITES_VALUE + " text not null);"; 

答えて

1

にあなたは引用符で文字列を区切る必要があります。

mDb.update(TABLE_THEME_FAVORITES, initialValues, KEY_NAME + "='" + names[c] + "'", null);

文字列は、あると想定される引用符で囲まれていない場合テーブル内のフィールド名。

+0

を照会SQLで文字列を区切るために必要UPDATE ThemeFavorites SET Favorites=? WHERE Name='Android'

すべきではない!...おかげで、私はそれがそのような愚かな何かを知っていました。私はそれを理解できないほど私を殺していた。 – easycheese

1

は、それはあなたが通常それだった

+0

あなたがしたことを理解するために、他の反応を読んでくれました。同じこと、ありがとう! – easycheese

関連する問題