Обновить все данные в базе данных SQLite? - PullRequest
0 голосов
/ 29 апреля 2018

Этот вопрос задавался ранее, но я все еще не нашел хорошего примера для обновления всех данных в вашей базе данных SQLite.

У меня есть класс модели с именем "ItemDatabaseModel", который содержит такие значения, как "item_id, category, description, image_url, ect". При обновлении списка этих ItemDatabaseModels я в настоящее время обновляю каждый атрибут по одному, но в результате все данные перезаписываются последним обновленным элементом.

Вот как я делаю свое обновление. Я начинаю с итераций в моем списке ItemDatabaseModels, которые я хочу обновить.

for (int i = 0; i < alItemDb.size(); i++) {
     dbProvider.update(alItemDb.get(i));
}

Вызываемый метод обновления принимает модель, а затем вызывает метод обновления для обновления базы данных

public void update(ItemDatabaseModel itemDatabaseModel) {
    mProvider.update(itemDatabaseModel, ItemSchema.CATEGORY + " =?", new String[]{itemDatabaseModel.category});
    mProvider.update(itemDatabaseModel, ItemSchema.ITEM_ID + " =?", new String[]{itemDatabaseModel.itemId});
    mProvider.update(itemDatabaseModel, ItemSchema.DESCRIPTION + " =?", new String[]{itemDatabaseModel.description});
    mProvider.update(itemDatabaseModel, ItemSchema.IMAGE_URL_1 + " =?", new String[]{itemDatabaseModel.imageUrl1});
    mProvider.update(itemDatabaseModel, ItemSchema.IMAGE_URL_2 + " =?", new String[]{itemDatabaseModel.imageUrl2});
    mProvider.update(itemDatabaseModel, ItemSchema.IMAGE_URL_3 + " =?", new String[]{itemDatabaseModel.imageUrl3});     
}

Затем я обновляю базу данных

public void update(T model, String where, String[] whereArgs) {
    mDatabase = getWritableDatabase();
    if (mDatabase.isOpen()) {
        mDatabase.update(model.getTableName(), model.getContentValues(), where, whereArgs);
    }
}

По моим наблюдениям, проблема может заключаться в том, где, но я не знаю, как это отрегулировать. Кроме того, есть ли лучшая реализация для обновления списка новых данных? Спасибо заранее!

1 Ответ

0 голосов
/ 29 апреля 2018

Для тех из вас, кто интересуется необходимыми исправлениями для решения этой проблемы, вот последние изменения.

Перебирайте список элементов для обновления

for (int i = 0; i < alItemDb.size(); i++) {
     dbProvider.update(alItemDb.get(i));
}

Передайте всю модель, чтобы впоследствии вы могли извлечь из нее значения содержимого и выполнить обновление на основе уникального идентификатора (id, email, ect)

public void update(ItemDatabaseModel itemDatabaseModel) {
     mProvider.update(itemDatabaseModel, ItemSchema.ITEM_ID + " = ?",  
}

Обновите базу данных

public void update(T model, String where, String[] whereArgs) {
    mDatabase = getWritableDatabase();
    if (mDatabase.isOpen()) {
        mDatabase.update(model.getTableName(), model.getContentValues(), where, whereArgs);
    }
}
...