2015-04-06 68 views
0

我已经有一个SQLite数据库设置,我正在使用它作为Android应用程序的缓存。该应用程序执行HTTP请求并获取我可以插入到数据库中的对象列表。第一个请求,如果我做了要求,怎么办所有以更好的方式如下:从SQLite数据库插入,更新和删除(Android)

1)插入从列表
2所有新对象)更新已经在数据库中的所有对象
3)删除最近对象列表中不存在的所有行。

我知道可以使用“INSERT OR UPDATE”查询来完成选项1和2。我如何有效管理第三个选项?

现在我的方法是从表中删除所有,然后插入所有。但这不是非常有效。任何想法如何改善?

回答

0

为此,您可以使用行的ID。为此,首先使用SELECT查询来检索想要删除的所有行,并将其添加到临时数组列表中,然后使用for循环通过数组列表以使用DELETE查询删除所有这些行。

0

您应该使用ContentProvider的applyBatch()方法(http://developer.android.com/reference/android/content/ContentProvider.html#applyBatch(java.util.ArrayList))来执行操作。

您可以异步地在单独的线程中执行此方法,以便您不会阻塞其他任何内容。您将不得不创建一个ContentProviderOperations的列表。实际上,您只需指定需要在ArrayList中插入或更新的实例,并实现applyBatch()方法,以便它自动删除数据库中的其余条目。

要回答关于如何删除不在表中的条目的问题,逻辑假设是按顺序搜索数据,然后删除那些不需要存在的条目。

0

我猜想的目的是刷新保存在数据库中的Http请求结果集。所以我认为最有效的方法是进行事务或批处理操作,先删除表中的所有行,然后插入新行。事务可能会更好,以便结果行不是全部都是新的或全部旧的,但不能混合使用。

相关问题