使用内容提供程序时重新创建数据库
Re-create database when using Content Providers
我的 Android 应用程序有一个 SQLite 数据库和一个内容提供程序。此 Content Provider 已在应用的 AndroidManifest.xml
中注册。它没有导出,所以只有我的应用程序可以看到它。
作为重置用户配置文件的一部分,我想完全擦除此数据库并从头开始重新创建它。起初我尝试从 activity 的上下文中调用 deleteDatabase()
。这有效,但前提是应用程序关闭并在之后重新打开。否则,当我尝试插入表示数据库是只读的行时,它会崩溃。我的理解是在调用 deleteDatabase()
之前需要先关闭连接。然而,据我所知,连接由内容提供者管理,不应手动关闭。
作为替代方案,我使用 ContentResolver
中的 call()
方法调用自定义函数,该函数将删除 table 中的所有数据并重置序列手动计数。
这行得通,但现在我必须手动删除每个 table 中的数据,并且必须跟踪我将来所做的任何更改。
有没有更好的方法来删除整个数据库并在使用 ContentProvider
时让我的 DatabaseHelper
(SQLiteOpenHelper
) 的 onCreate()
触发?
想到的一个建议是让您的自定义函数删除表并重新创建它们。您已经拥有在 DatabaseHelper
的 onCreate()
中创建表格的代码。在 DatabaseHelper
和自定义方法都可以访问的地方重构它。
我的 Android 应用程序有一个 SQLite 数据库和一个内容提供程序。此 Content Provider 已在应用的 AndroidManifest.xml
中注册。它没有导出,所以只有我的应用程序可以看到它。
作为重置用户配置文件的一部分,我想完全擦除此数据库并从头开始重新创建它。起初我尝试从 activity 的上下文中调用 deleteDatabase()
。这有效,但前提是应用程序关闭并在之后重新打开。否则,当我尝试插入表示数据库是只读的行时,它会崩溃。我的理解是在调用 deleteDatabase()
之前需要先关闭连接。然而,据我所知,连接由内容提供者管理,不应手动关闭。
作为替代方案,我使用 ContentResolver
中的 call()
方法调用自定义函数,该函数将删除 table 中的所有数据并重置序列手动计数。
这行得通,但现在我必须手动删除每个 table 中的数据,并且必须跟踪我将来所做的任何更改。
有没有更好的方法来删除整个数据库并在使用 ContentProvider
时让我的 DatabaseHelper
(SQLiteOpenHelper
) 的 onCreate()
触发?
想到的一个建议是让您的自定义函数删除表并重新创建它们。您已经拥有在 DatabaseHelper
的 onCreate()
中创建表格的代码。在 DatabaseHelper
和自定义方法都可以访问的地方重构它。