2011-10-24 58 views
0

我有下載一組數據(項目和值)配對的代碼。值可以隨時間變化,所以我在我的代碼中有一個更新函數。問題是,mDb.update總是拋出一個錯誤,即使在第一次代碼成功運行並且表創建之後(我知道這是因爲稍後在應用程序中顯示的值)名稱[c]是「Android」 :SQL更新始終引發錯誤

android.database.sqlite.SQLiteException:沒有這樣的列:安卓,而編譯:UPDATE ThemeFavorites SET收藏=? WHERE Name = Android

讓我感到困惑的是,它似乎代碼正在尋找一個名爲Android的列,而不是KEY_NAME列......任何人都可以點亮一些東西嗎?

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

如果字符串是不是在它被認爲是報價:萬一

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

您需要使用引號來分隔字符串

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++; 
    } 
} 

我創建表的代碼表中的字段名稱。

+0

原來如此!......謝謝你,我知道這是愚蠢的東西那樣。我無法弄清楚,這讓我很吃驚。 – easycheese

1

難道不該UPDATE ThemeFavorites SET Favorites=? WHERE Name='Android'

您通常需要分隔字符串SQL查詢

+0

讓我讀了其他回覆,瞭解你做了什麼。同樣的事,謝謝! – easycheese