4

大家好,我是 android 新手并使用绿色 DAO 来管理数据库,但我经常得到一个数据库未关闭异常,因为我在 Application onTeriminate() 中这样做,我在整个应用程序中只维护数据库的单个连接,但在某些情况下,当我的应用程序转到后台并恢复数据库连接对象变为空,我通过在使用之前检查对象的空性来处理问题,但现在我经常收到异常

android.database.sqlite.DatabaseObjectNotClosedException:应用程序没有关闭此处打开的游标或数据库对象

请帮助我如何处理这个

提前致谢

lang.IllegalStateException: 没有数据库锁!01-03 09:39:18.688: E/System(3063): 在 android.database.sqlite.SQLiteDatabase.verifyLockOwner(SQLiteDatabase.java:2090) 01-03 09:39:18.688: E/System(3063): 在android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2182) 01-03 09:39:18.688: E/System(3063): 在 android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2178 ) 01-03 09:39:18.688: E/System(3063): 在 android.util.LruCache.trimToSize(LruCache.java:197) 01-03 09:39:18.688: E/System(3063): 在 android .util.LruCache.evictAll(LruCache.java:285) 01-03 09:39:18.688: E/System(3063): 在 android.database.sqlite.SQLiteDatabase.deallocCachedSqlStatements(SQLiteDatabase.java:2143) 01-03 09 :39:18.688:E / System(3063):在android.database.sqlite.SQLiteDatabase。

关闭连接代码:

@Override
public void onTerminate() {
    // TODO Auto-generated method stub
    super.onTerminate();
    snail_mail_db.close();
      snail_mail_database_helper_obj.close();

}
4

2 回答 2

0

您收到此异常“应用程序未关闭此处打开的游标或数据库对象”,因为当您打开连接时,您需要在操作完成后关闭该游标。使用 db.close(); 完成任何操作后。

于 2012-12-19T07:04:36.497 回答
0

我扩展了 Application 类(作为 theApp)并在那里打开和关闭数据库连接。然后我的所有活动都可以通过 访问数据库,theApp.getInstance().daoSession()而无需在活动暂停或完成时关闭数据库。当最后一个活动完成时,Android 将终止应用程序,这将关闭数据库连接。

于 2012-12-22T20:18:25.367 回答