使用内容提供程序时重新创建数据库

Re-create database when using Content Providers

我的 Android 应用程序有一个 SQLite 数据库和一个内容提供程序。此 Content Provider 已在应用的 AndroidManifest.xml 中注册。它没有导出,所以只有我的应用程序可以看到它。

作为重置用户配置文件的一部分,我想完全擦除此数据库并从头开始重新创建它。起初我尝试从 activity 的上下文中调用 deleteDatabase()。这有效,但前提是应用程序关闭并在之后重新打开。否则,当我尝试插入表示数据库是只读的行时,它会崩溃。我的理解是在调用 deleteDatabase() 之前需要先关闭连接。然而,据我所知,连接由内容提供者管理,不应手动关闭。

作为替代方案,我使用 ContentResolver 中的 call() 方法调用自定义函数,该函数将删除 table 中的所有数据并重置序列手动计数。

这行得通,但现在我必须手动删除每个 table 中的数据,并且必须跟踪我将来所做的任何更改。

有没有更好的方法来删除整个数据库并在使用 ContentProvider 时让我的 DatabaseHelper (SQLiteOpenHelper) 的 onCreate() 触发?

想到的一个建议是让您的自定义函数删除表并重新创建它们。您已经拥有在 DatabaseHelperonCreate() 中创建表格的代码。在 DatabaseHelper 和自定义方法都可以访问的地方重构它。