android sqlite数据库已关闭错误
我有一个应用程序与sqlite数据库。android sqlite数据库已关闭错误
我创建了我自己的数据库类,它包含一个SqliteDatabase实例。该类实现我的查询,打开,关闭等(该类不是单身人士)。
我在我的应用程序中有一个活动,一个服务和一个appwidget。
在我需要数据库的地方,我创建了我的类的一个对象,打开,做些东西,最后关闭。
例如在活动中,我在onStart中打开数据库并关闭onStop。
除了appwidget,一切都很好。
如果我需要选择appwidget onUpdate中的数据,那就没问题。
但是当我尝试从appwidget执行更新时,出现“数据库DATABASE_FLE已关闭”错误。
它可能是什么?
我添加了一些日志,我关闭数据库,并且这些行的非执行之前执行此错误..数据库应该没问题。
任何想法?
谢谢。
问题是我编译了一个SQLiteStatment对象并将其保存以备将来使用,同时我的数据库对象被替换了。 所以SQLiteStatement需要重新编译一次。
我有这样的事情:
public void func(SQLiteDatabase db) {
if (mStatement == null)
mStatement = db.compileStatement(SQL);
mStatement.execute();
这样做的问题是,db对象在函数调用改变,而且编译声明已经关闭的第一个数据库对象。
解决方法是删除if-null,并为每个db对象编译语句。
我在想什么,在这种情况下,android可能会关闭/卸载您的活动(例如,如果设备上留有少量内存,可能会发生这种情况),但是在这段时间内,您的appwidget仍处于活动状态。
现在,由于您的活动已关闭,因此您的db已关闭。 Appwidget尝试更新数据库,但其已关闭。
检查这种情况,但无论如何,你应该考虑这种情况。 :)
在appwidget onUpdate中,我创建了一个新的数据库对象并打开数据库.. SELECT的工作原理..当我尝试更新时(实际上当我调用一个sql语句对象上的绑定)时,我得到错误 – Ran 2012-04-09 17:56:52
我相信它对于解决您的问题非常重要(以防之前没有人这样做),因为其他开发人员可以从中学习。 – Jviaches 2012-04-10 07:36:42