在我的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:应用程序未关闭此处打开的游标或数据库对象
有一个直接通向此函数的堆栈跟踪(以及非常类似于它的堆栈跟踪),尽管Activity工作正常。我究竟做错了什么?我在这里看了一会儿,那是我添加try / finally以确保我总是关闭Cursor,但我仍然得到错误。我该如何解决这个问题?
答案 0 :(得分:2)
您正在正确关闭游标,但您还需要关闭数据库,同时确保关闭数据库:
if(db.isOpen()) db.close();