我有下载一组数据(项目和值)的代码。该值可以随时间变化,因此我的代码中有更新功能。问题是,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);";
答案 0 :(得分:1)
您需要使用引号分隔字符串:
mDb.update(TABLE_THEME_FAVORITES, initialValues, KEY_NAME + "='" + names[c] + "'", null);
如果字符串不在引号中,则假定它是表中的字段名称。
答案 1 :(得分:1)
不应该是UPDATE ThemeFavorites SET Favorites=? WHERE Name='Android'
您通常需要在SQL查询中分隔字符串