1

我正在使用SQLiteOpenHelper. 当我的应用程序正常关闭时,该方法中的数据库也正常关闭onDestroy()。当它被强制关闭时,数据库保持打开状态,稍后,当我的应用程序尝试使用 读取数据库时getReadableDatabase(),它崩溃并显示以下消息:

09-26 13:45:30.995: ERROR/Database(12632): close() was never explicitly called on database

这是完整的 LogCat:

09-27 03:10:04.331: ERROR/Database(391): close() was never explicitly called on database '/data/data/myApplication/databases/DownloadDatabase1' 
09-27 03:10:04.331: ERROR/Database(391): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1847)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
09-27 03:10:04.331: ERROR/Database(391):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:544)
09-27 03:10:04.331: ERROR/Database(391):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)

我跟踪了堆栈跟踪,我猜这个异常是因为下面的代码行:

setLocale(Locale.getDefault());

上面的代码来自文件SQLiteDatabase.java。关于如何解决这个问题的任何建议?

4

2 回答 2

2

即使它给出了该错误,您也应该能够访问数据库。查看底层代码,我的理解是这样的错误不应该导致您的程序退出: http ://hi-android.info/src/android/database/sqlite/SQLiteDatabase.java.html

检查finalize()那里的方法。你会看到,它只是试图清理,它不会抛出异常。

你肯定在其他地方有问题。

于 2011-09-26T15:21:21.187 回答
1

我建议您在使用完数据库后立即关闭它。每次需要执行事务时打开和关闭数据库也不是一个坏主意。除非您的应用程序不断写入数据,否则您不应该失去性能

于 2011-09-26T14:19:03.357 回答