1

您好,我正在尝试找出一种方法来破坏我的数据库,每次应用程序启动时,要么从后台返回,要么在关闭后重新打开。问题是,当我第一次尝试运行我的应用程序时,我得到一个 null 并且我的应用程序崩溃了。

我的应用程序: 用户在登录屏幕上得到提示,我创建了数据库,移动到另一个活动以执行查询。从此活动中,用户无法返回登录,只能进入手机主屏幕。当我将转到主屏幕并重新打开应用程序时,我想清除数据库并像我第一次使用该应用程序一样开始。我知道这对于应用程序实际上并不实用,但这只是为了学习。

我试图做db.close()and context.deleteDatabase(db.getPath());in onResumeand onRestart,但这总是会破坏我的应用程序。我还尝试检查 'db.getPath()!=null' ,但这也无济于事。

谢谢你

4

3 回答 3

1

既然您知道这不是使用数据库的最实用方法,我想我不会因此而困扰您。

您要做的不是在 Resume() 或 Restart() 期间调用删除数据库内容的方法,您实际上希望通过 Stop() 调用该方法。

您要使用的方法是

db.delete(String table, string whereClause, String [] whereArgs);

传递您要删除的表的名称,即“user_food_database”,一个 where 子句在您的情况下为,因为您要删除所有行,而对于 whereArgs 则为空。

这是官方文档:

"删除数据库中行的便捷方法。

参数 table 要从中删除的表 whereClause 删除时要应用的可选 WHERE 子句。传递 null 将删除所有行。

如果传入 whereClause,则返回受影响的行数,否则返回 0。要删除所有行并获得计数传递“1”作为 whereClause。"

您也可以致电:

deleteDatabase(File pathToDatabase)

如果您的数据库中有多个表,但每次重新创建数据库本身的成本很高,并且仅删除内容可能会更好。

于 2013-01-29T20:44:33.027 回答
0

我建议您简单地擦除数据库,即删除所有数据(甚至删除表)。这不是您问题的直接答案,但具有相同的效果。

于 2013-01-29T20:36:21.080 回答
0

只需在open()您的方法中删除所有表SQLiteDatabaseHelper并通过调用重新创建表onCreate(db)。当然,只有在每次应用程序启动时只打开一次数据库时才有效。

于 2013-01-29T20:39:35.500 回答