之前已经提出过这个问题,但我仍然没有找到更新SQLite数据库中所有数据的好例子。
我有一个名为" ItemDatabaseModel"的模型类。包含" item_id,category,description,image_url,ect"等值。更新这些ItemDatabaseModel的列表时,我目前一次更新一个属性,但最终结果是所有数据都被最后更新的项覆盖。
以下是我的更新方式。我首先遍历我想要更新的ItemDatabaseModel列表。
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});
}
正在调用的更新方法接受模型,然后调用update方法来更新数据库
public void update(T model, String where, String[] whereArgs) {
mDatabase = getWritableDatabase();
if (mDatabase.isOpen()) {
mDatabase.update(model.getTableName(), model.getContentValues(), where, whereArgs);
}
}
然后我更新数据库
{{1}}
根据我的观察,问题可能在哪里,但我不知道如何调整它。此外,是否有更好的实施更新新数据列表?先谢谢!
答案 0 :(得分:1)
对于那些想知道解决此问题需要更正的人,以下是最后的更改。
将您的项目列表迭代到udpate
for (int i = 0; i < alItemDb.size(); i++) {
dbProvider.update(alItemDb.get(i));
}
传递整个模型,以便以后可以从中检索contentValues,并根据唯一标识符(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);
}
}