在扩展 SQLiteOpenHelper 的 DatabaseHelper 类中,我设置了各种方法以将 Cursors 返回到我的其他活动,这样我就不会在 DatabaseHelper 之外的任何其他类中执行任何查询。在这些方法中,我不会在之后关闭光标或数据库,而是像这样返回它:
public Cursor getCoursesLeft()
{
// Open a readable database.
SQLiteDatabase database = this.getReadableDatabase();
// Query the database and return the cursor.
return database.query(DEGREE_PLAN_TABLE, null, DEGREE_COLUMN_TAKEN + " = ?",
new String[] { "0" }, null, null, DEGREE_COLUMN_CLASS_NAME + " COLLATE NOCASE");
}
无论从哪个 Activity 调用该方法,我都会确保关闭使用后返回的 Cursor。
由于 Cursor 是一个对象,它应该通过引用传递,对吗?所以从其他活动关闭它应该关闭原始对象,如果我理解正确关闭光标也会关闭数据库。
这是一种不好的编码习惯吗?
似乎随机地我会收到一个 LogCat 错误,说数据库上从未调用过 close,而我在代码中唯一能找到的可能是我如何在这些方法中返回游标的原因。