Запись не будет удалена из базы данных SQLite - PullRequest
1 голос
/ 13 апреля 2019

В настоящее время я работаю над своей оценкой A Level Computer Science Controlled Assessment, создавая приложение Scout Manager для Android Studio, Java и XML, ни одно из которых я не использовал ранее. Сейчас я на последнем отрезке, но я столкнулся с ошибкой, которую, похоже, не могу решить.

Я пытаюсь удалить запись сеанса из таблицы событий. Раньше это прекрасно работало, однако по какой-то причине, несмотря на отсутствие изменений в коде (что я помню, во всяком случае), оно больше не работает.

Вот код из действия «Редактировать событие»:

//Deletes the event from the database
    public void deleteEvent(View view)
    {
        boolean result=DatabaseHandler.deleteSession(sessionid);
        if (result==true)
        {
            Toast.makeText(
                    context,
                    "Event Deleted",
                    Toast.LENGTH_SHORT
            ).show();
            backToProgramme(view);
        }
        else
        {
            Toast.makeText(
                    context,
                    "Error - please try again",
                    Toast.LENGTH_SHORT
            ).show();
        }
    }

А вот и код из базы данных Handler:

//Deleting a session in the events table
    public boolean deleteSession(int id)
    {
        boolean result = false;
        String query = "SELECT * FROM " + TABLE_EVENTS + " WHERE " + COLUMN_SEID + " = '"
                + String.valueOf(id) + "'";
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);
        sessionDetails session = new sessionDetails();
        if (cursor.moveToFirst())
        {
            session.setSessionID(Integer.parseInt(cursor.getString(0)));
            db.delete (TABLE_EVENTS, COLUMN_SCID + "=?", new String[]{String.valueOf(
                    session.getSessionID())});
            cursor.close();
            result = true;
        }
        return result;
    }

Я вообще не могу понять, почему это не удаляет запись.

1 Ответ

3 голосов
/ 13 апреля 2019

Что вы делаете здесь:
ищите в таблице TABLE_EVENTS, чтобы найти строку с COLUMN_SEID = id и, если найдено, получите значение столбца COLUMN_SCID и удалите строку, где COLUMN_SCID равно этому значению!Почему все это?Разве вы не можете просто удалить строку с COLUMN_SEID = id?Я считаю, что ваш код должен быть написан так:

public boolean deleteSession(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete(TABLE_EVENTS, COLUMN_SEID + " = ?", new String[]{String.valueOf(id)}) > 0;
}

Метод delete() возвращает количество удаленных строк, поэтому deleteSession() вернет false, если ни одна строка не была удалена.

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