4

在我的 Android Activity 中,我需要从数据库中读取内容。我创建了一个帮助类来处理我的数据库访问。这个帮助类有几种不同的方法,旨在读取不同的东西并毫不费力地返回它们。这是一个例子。

public String GetName(int id)
{
    String toReturn = null;
    Cursor cursor = null;

    try
    {
        cursor = db.query(TABLE_NAME,
            new String[] {"name"},
            "id = " + id,
            null,
            null,
            null,
            null,
            null);

        assert(cursor.getCount() == 1);

        cursor.moveToFirst();

        toReturn = new String(cursor.getString(0)); 
    }
    finally
    {
        if(cursor != null)
            cursor.close();
    }

    return toReturn;
}

我不断收到错误

10-10 15:52:18.991:W/SQLiteCompiledSql(28313):在终结器中释放语句。请确保在光标上显式调用 close():SELECT name FROM my_table WHERE id = 0 10-10 15:52:18.991: W/SQLiteCompiledSql(28313): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the在此处打开的游标或数据库对象

尽管 Activity 工作正常,但堆栈跟踪直接指向此函数(以及与之非常相似的函数)。我究竟做错了什么?我在这里看了一会儿,然后我添加了 try/finally 以确保我总是关闭光标,但我仍然收到错误。我怎样才能解决这个问题?

4

1 回答 1

2

您正在正确关闭游标,但您还需要关闭数据库,请确保您也正在关闭数据库:

if(db.isOpen()) db.close();
于 2012-11-03T08:17:10.947 回答