我已经有一个SQLite数据库设置,我将其用作Android应用程序的缓存。应用程序执行HTTP请求并获取可以插入到数据库中的对象列表。在第一次请求之后,如果我再提出请求,那么如何以更好的方式执行以下所有操作:
1)从列表中插入所有新对象
2)更新数据库中已有的所有对象
3)删除最新对象列表中不存在的所有行。
我知道可以使用“INSERT OR UPDATE”查询完成选项1和2。如何有效管理第三个选项?
现在我的方法是从表中删除所有,然后插入所有。但这不是很有效。任何想法如何改进它?
答案 0 :(得分:0)
为此,您可以使用行的ID。为此,首先使用SELECT查询检索要删除的所有行并将其添加为临时arraylist,然后使用for循环遍历arraylist以使用DELETE查询删除所有这些行。
答案 1 :(得分:0)
您应该使用ContentProvider(http://developer.android.com/reference/android/content/ContentProvider.html#applyBatch(java.util.ArrayList)的applyBatch()方法执行操作。
您可以异步在单独的线程中执行此方法,这样就不会阻止任何其他操作。您必须创建ContentProviderOperations列表。实际上,您只需要在ArrayList中指定需要插入或更新的那些,并实现applyBatch()方法,以便它自动删除数据库中的其余条目。
要回答有关如何删除不在表中的条目的问题,逻辑假设是按顺序搜索数据,然后删除不需要存在的数据。
答案 2 :(得分:0)
我的意图是刷新保存在数据库中的Http请求结果集。所以我认为最有效的方法是执行事务或批处理操作,首先从表中删除所有行,然后插入新行。事务可能会更好,以便结果行全部为新的或全部旧的,但不会混合。