Поля первичного ключа автоинкремента SQLite не разрешают обновление

У меня есть таблица базы данных со столбцом "ID INTEGER PRIMARY KEY AUTOINCREMENT". Когда я пытаюсь обновить существующую строку этой таблицы первичным ключом, приложение закрывается, говоря "К сожалению, остановлено".

public int updateUser(User user) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_FIRSTNAME, user.getUser_firstName()); // user first name
    values.put(KEY_LASTNAME, user.getUser_lastName()); // user first name
    values.put(KEY_USERNAME, user.getUsername());
    values.put(KEY_PASSWORD, user.getPassword());
    values.put(KEY_USERLEVEL, user.getUser_level());
    values.put(KEY_DESIGNATION, user.getDesignation());
    values.put(KEY_MOBILENO, user.getMobile_no());
    values.put(KEY_EMAIL, user.getEmail());
    values.put(KEY_NIC, user.getNIC());
    values.put(KEY_GENDER, user.getGender());
    values.put(KEY_DOB, user.getDOB());
    values.put(KEY_AVAILABILITY, user.getAvailability());

    db.close();

    // updating row
    return db.update(TABLE_USERS, values, KEY_ID + " = ?",
            new String[] { String.valueOf(user.getUser_id()) });

Logcat:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.projectmanagementsys.com.sasith.project_management/com.projectmanagementsys.com.sasith.project_management.AddUser}: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.projectmanagementsys.com.sasith.project_management/databases/ProjectManagement

Во всем этом нет ошибки, и код хорошо работает, когда я комментирую запрос на обновление. Может кто-нибудь дать решение, пожалуйста? Спасибо.

1 ответ

Решение

У вас есть линия db.close() с последующим db.update() и ваша ошибка говорит о том, что вы пытаетесь открыть уже закрытый объект. Вы не закрыли базу данных после того, как добавили данные, вы закрыли ее раньше. Вам нужно будет обновить строку, закрыть базу данных, а затем вернуть свое значение.

// updating row
int result = db.update(TABLE_USERS, values, KEY_ID + " = ?",
        new String[] { String.valueOf(user.getUser_id()) });

db.close();
return result;
Другие вопросы по тегам