我正在使用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)});
这可确保行存在并具有最新值。