SQL Update постоянно выдает ошибку - PullRequest
0 голосов
/ 24 октября 2011

У меня есть код, который загружает набор данных (элемент и значение) в паре. Значение может меняться со временем, поэтому в моем коде есть функция обновления. Проблема в том, что mDb.update ВСЕГДА выдает ошибку, даже после первого успешного выполнения кода и создания таблицы (я знаю это, потому что значения появляются позже в приложении), также имена [c] - «Android» :

android.database.sqlite.SQLiteException: нет такого столбца: Android: при компиляции: UPDATE ThemeFoving 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 ]

1 голос
/ 24 октября 2011

Разве это не должно быть UPDATE ThemeFavorites SET Favorites=? WHERE Name='Android'

Обычно в SQL-запросах необходимо разделять строки

1 голос
/ 24 октября 2011

Вы должны разделять строки кавычками:

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

Если строка не в кавычках, она считается именем поля в таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...