如何知道使用绿色DAO数据库的所有打开的连接..?(How to know all open con

2019-08-04 07:23发布

大家好IAM新的Android和使用绿色DAO用于管理数据库,但IAM经常得到一个数据库中未封闭的例外,因为IAM做,在应用onTeriminate(),IAM只保持数据库的单一连接,通过了申请,但在某些情况下,当我的应用程序切换到后台并恢复数据库连接对象变得无效,我通过使用之前检查对象的零内斯处理的问题,但现在经常IAM得到异常

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

请帮助我如何处理这

提前致谢

堆栈跟踪:九月一日至3日:39:18.688:E / SQLiteDatabase(3063):关闭()从未被明确要求在数据库 '/data/data/com.opera.mini.android/databases/google_analytics.db' 01- 03 09:39:18.688:E / SQLiteDatabase(3063):android.database.sqlite.DatabaseObjectNotClosedException:应用程序没有关闭在这里开了9月1日至3日的光标或数据库对象:39:18.688:E / SQLiteDatabase(3063) :在android.database.sqlite.SQLiteDatabase(SQLiteDatabase.java:1943)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1007) 9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1051)01-03 09:39:18.688:E / SQLiteDatabase(3063):在android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:787)01-03 09:39:18.688:E / SQLiteDatabase(306 3):在android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)01 -03 09:39:18.688:E / SQLiteDatabase(3063):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在玉米.google.android.apps.analytics.PersistentHitStore.loadExistingSession(未知源)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在com.google.android.apps.analytics.PersistentHitStore(未知源)01 -03 09:39:18.688:E / SQLiteDatabase(3063):在com.google.android.apps.analytics.PersistentHitStore(未知源)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在玉米.google.android.apps.analytics.AnalyticsReceiver.onReceive(未知源)9月1日至三日:39:18.688:E / SQLiteDatabase(3063):在com.opera.mini.android.OpMiniInstallReferrerReceiver.onReceive(来源:15)01 -03 09:39:18.688:E / SQLiteDatabase(3063 ):在android.app.ActivityThread.handleReceiver(ActivityThread.java:2119)9月一日至3日:39:18.688:E / SQLiteDatabase(3063):在android.app.ActivityThread.access $ 1500(ActivityThread.java:123)01 -03 09:39:18.688:E / SQLiteDatabase(3063):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1197)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在机器人.os.Handler.dispatchMessage(Handler.java:99)01-03 09:39:18.688:E / SQLiteDatabase(3063):在android.os.Looper.loop(Looper.java:137)01-03 9时39分:18.688:E / SQLiteDatabase(3063):在android.app.ActivityThread.main(ActivityThread.java:4424)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在java.lang.reflect.Method中。 invokeNative(本机方法)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在java.lang.reflect.Method.invoke(Method.java:511)9月1日至3日:39:18.688:E / SQLiteDatabase (3063):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在com.android.internal.os。 ZygoteInit.mai N(ZygoteInit.java:551)9月1日至3日:39:18.688:E / SQLiteDatabase(3063):在dalvik.system.NativeStart.main(本机方法)9月1日至3日:39:18.688:E /系统(3063 ):未捕获的异常被终结九月一日至3日抛出:39:18.688:E /系统(3063):java.lang.IllegalStateException:不要有数据库的锁! 9月1日至3日:39:18.688:E /系统(3063):在android.database.sqlite.SQLiteDatabase.verifyLockOwner(SQLiteDatabase.java:2090)9月1日至3日:39:18.688:E /系统(3063):在android.database.sqlite.SQLiteDatabase $ 1.entryRemoved(SQLiteDatabase.java:2182)九月一日至3日:39:18.688:E /系统(3063):在android.database.sqlite.SQLiteDatabase $ 1.entryRemoved(SQLiteDatabase.java:2178 )9月1日至3日:39:18.688:E /系统(3063):在android.util.LruCache.trimToSize(LruCache.java:197)9月1日至3日:39:18.688:E /系统(3063):在机器人.util.LruCache.evictAll(LruCache.java:285)9月1日至三日:39:18.688:E /系统(3063):在android.database.sqlite.SQLiteDatabase.deallocCachedSqlStatements(SQLiteDatabase.java:2143)9月1日至三日:39:18.688:E /系统(3063):在android.database.sqlite.SQLiteDatabase.closeClosable(SQLiteDatabase.java:1126)9月1日至3日:39:18.688:E /系统(3063):在android.database。 sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java:1914)九月1日至3日:39:18.688:E /系统(3063):在java.lang.Daemons $ FinalizerDaemon.doFinalize(Daemons.java:182 )9月1日至3日:39:18.688:E /系统(3063):在java.lang.Daemons $ FinalizerDaemon.run(Daemons.java:168)9月1日至3日:39:18.688:E /系统(3063):在java.lang.Thread.run(Thread.java:856)

代码关闭连接:

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

}

Answer 1:

您收到此例外“应用程序没有关闭在这里打开游标或数据库对象”,因为当你opene连接,你需要关闭游标当你操作完成。 使用db.close(); 任何操作完成后。



Answer 2:

我扩展了应用类(如该app),并打开和关闭数据库连接存在。 然后我所有的活动可以通过访问数据库theApp.getInstance().daoSession()不关闭DB活动时暂停或结束。 Android将终止该app,它会关闭数据库连接,当最后一个活动就结束了。



文章来源: How to know all open connections of data base using green DAO..?