以最佳方式更新安卓应用程序的SQLite表



我正在使用android:minSdkVersion="14"开发安卓应用程序。应用程序从服务器以 JSON 形式接收数据。接收到的数据需要添加到 sqlite 表中。如果存在一行,则必须更新除两个字段之外的所有字段。如果表中尚不存在一行,则必须插入该行。我正在寻找最有效的性能方法。

已经考虑了该功能insertwithonCoflict(),但它不是一个选项,因为在更新的情况下,它会更新所有字段,包括两个不应该更新的字段。

replace()的功能也不合适。

我会选择一个 SELECT 来检查该行是否存在,然后选择插入更新,但我想知道我是否可以以某种方式优化该过程.

两种方法:

  • 更改数据库结构,使表仅包含服务器数据。将本地数据(两列)放在引用服务器数据表的另一个表中。更新时,只需插入服务器数据表并"替换"冲突解决方案即可。

  • 执行选择-插入/更新逻辑。

在任何情况下,为了提高性能,请使用数据库事务来减少 I/O。也就是说,将数据库更新循环包装在事务中,并且仅在完成所有操作后提交它。(如果事务变得太大,请将循环拆分为可能几千行的事务块。

我使用的一个很好的解决方案如下:

long id = db.insertWithOnConflict(TABLE, null, contentValues, SQLiteDatabase.CONFLICT_IGNORE);
if(id!=-1) db.update(TABLE, contentValues, "_id=?", new String[]{String.valueOf(id)});

这可确保行存在并具有最新值。

最新更新