我明确关闭了我的Cursor和数据库,但仍然没有关闭异常

时间:2011-11-12 16:06:09

标签: android sql

我在这个主题上看到了类似的问题,但没有明确的答案。当我停止并重启我的Android应用程序时,我得到一个SQL异常,说我的数据库没有关闭。我确信我正在做我应该关闭数据库和Cursor的事情。请问你能不能错过任何东西。

在我的主要活动中,我有:

... <snip> ...
onCreate() {
    ... <snip> ...
    mDbHelper = new myDBAdapter(this);
    mDbHelper.open();
    ... <snip> ...

    Cursor dataCursor = mDbHelper.fetchData();
    startManagingCursor(dataCursor);
    ... <snip> ...
    stopManagingCursor(dataCursor);
    dataCursor.close();
}

onDestroy() {
    super.onDestroy();
    mDbHelper.close();
}

在我的DBAdapter活动中,我有:

public myDBAdapter open()
        throws android.database.SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    return this;
}

public void close() {
    mDbHelper.close();
    Log.v(CLASS_NAME, CLASS_NAME + " Closed the database helper");
}

2 个答案:

答案 0 :(得分:1)

尝试用try / catch / finally块包围...虽然有时候我也会收到警告,使用这种方法。然而,最后使用保证将调用close()。

        try {
            cursor = callLogsSQLitedb.query(TABLE_NAME, from, null, null,
                    null, null, orderBy);
            if (cursor != null && cursor.moveToFirst()) {
                //do stuff

        } finally {
            Log.d(TAG, " Closing cursor...");
            if (cursor != null && !cursor.isClosed()) {
                cursor.close();
            }

答案 1 :(得分:0)

onDestroy()无法保证被调用。具体而言,如果您的活动未在应用启动之间销毁,则不会调用它。也许改为使用onPause()