Сбой приложения при обновлении базы данных

В настоящее время я разрабатываю приложение для Android с затмением. У меня возникла проблема при обновлении базы данных. Проблема заключается в сбое приложения при вызове метода updateFlag. Метод updateFlag обновляет только один конкретный столбец только на основе rowId.

Это моя структура базы данных в классе SQLiteAdapter:

public long insert(String answer, String question, String hint, String flag, String level){

  ContentValues contentValues = new ContentValues();
  contentValues.put(KEY_ANSWER, answer);
  contentValues.put(KEY_QUESTION, question);
  contentValues.put(KEY_HINT, hint);
  contentValues.put(KEY_FLAG, flag);
  contentValues.put(KEY_LEVEL, level);
  return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues);
 }

Это метод обновления в классе SQLiteAdapter:

public void updateFlag(long rowId)
    {
        ContentValues args = new ContentValues();
        args.put(KEY_FLAG, "1");
        sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null);
    }

И вот как я вызываю метод updateFlag в другом классе:

        mySQLiteAdapterListener2 = new SQLiteAdapter(this);
        mySQLiteAdapterListener2.openToWrite();
        long idListener = Long.parseLong(getId);
        mySQLiteAdapterListener2.updateFlag(idListener);
        mySQLiteAdapterListener2.close();

Что не так с моим кодом? Кто-нибудь знает, как правильно обновить один конкретный столбец на основе rowId?

2 ответа

Метод обновления SQLiteDatabase принимает четыре аргумента:

database.update(String table_name, ContentValues values, String selection, String[] selectionArgs);

Итак, ваш запрос должен быть таким же, как в приведенном ниже методе updateFlag. Замените ваш метод updateFlag этим и попробуйте это.

public void updateFlag(long rowId)
    {
        ContentValues args = new ContentValues();
        args.put(KEY_FLAG, "1");
        sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[]{rowId+""});
    }

Попробуй это:

sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[] {rowId});

Последние параметры, если для передачи значений, которые заменят "?".

Это предполагает, что у вас есть проблемы с вашим обновлением. Вам нужно опубликовать трассировку стека, чтобы мы могли видеть, где происходит сбой приложения.

Другие вопросы по тегам