SQL Update一直在抛出错误

时间:2011-10-24 17:31:57

标签: android sql sql-update

我有下载一组数据(项目和值)的代码。该值可以随时间变化,因此我的代码中有更新功能。问题是,mDb.update总是抛出一个错误,即使在代码第一次成功运行并且创建了表之后(我知道这是因为值会在应用程序的后面显示)也名称[c]是“Android” :

  

android.database.sqlite.SQLiteException:没有这样的列:Android :,同时编译:UPDATE ThemeFavorites SET Favorites =?名称= Android

令我感到困惑的是,似乎代码正在寻找一个名为Android的列,而不是KEY_NAME列......任何人都可以解决这些问题吗?

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);";

2 个答案:

答案 0 :(得分:1)

您需要使用引号分隔字符串:

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

如果字符串不在引号中,则假定它是表中的字段名称。

答案 1 :(得分:1)

不应该是UPDATE ThemeFavorites SET Favorites=? WHERE Name='Android'

您通常需要在SQL查询中分隔字符串