2016-11-25 80 views
5

我的Android应用程序有一个SQLite数据库和一个内容提供程序。此内容提供商已在应用程序的AndroidManifest.xml中注册。它不会被导出,所以只有我的应用可以看到它。使用内容提供程序时重新创建数据库

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

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

这可行,但现在我必须手动删除每张表中的数据,并且必须跟踪我在将来做出的任何更改。

是否有更好的方法来删除整个数据库,并有我DatabaseHelperSQLiteOpenHelper)触发的onCreate()使用ContentProvider什么时候?

+0

为什么要重新创建而不仅仅是删除所有内容? –

+0

@DiegoTorresMilano我想我只是试图快速刷新数据库到一个新的状态,而不必删除每个表/行(因此试图调用deleteDatabase),让初始设置过程重新配置新的配置文件,因为它会在第一次跑。目前我正在删除所有数据行,我只是很好奇,如果有一些东西接近调用deleteDatabase本来可以工作的。 – Programmer001

+0

您不应该在打开文件时尝试删除该文件。 –

回答

1

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

+0

没错。在deleteDatabase不起作用后,我开始删除表,但后来决定删除所有的行并重置它们的序列数,而不是调用onCreate。你的答案也会起作用。请参阅我对迭戈的回复以获得更多的推理。如果没有其他答案,我可以接受这个答案。 – Programmer001

相关问题