在我的擴展SQLiteOpenHelper的DatabaseHelper類中,我設置了各種方法將Cursors返回到其他Activities,這樣我就不會在除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");
}
從任何活動我打電話從方法,我不保證關閉後,我用它那所返回的Cursor。
由於光標是一個對象,它應該通過引用傳遞,是否正確?因此,從其他Activity關閉它應關閉原始對象,並且如果我正確理解它,關閉Cursor也會關閉數據庫。
這是一個不好的編碼習慣?
它看起來像隨機我會得到一個LogCat錯誤,說關閉從未在數據庫上調用,我可以在我的代碼中找到唯一可能的原因是我如何返回這些方法中的遊標。
作爲一個設計它是相當奇怪。通常,一個對象或圖層需要「擁有」數據庫遊標,管理它們,並且只將遊標「借」到其他圖層,或者根本不暴露它們。我會考慮從你開始的任何地方返回整個數據庫操作的結果。您還可以使用回調模式使其他類不知道遊標生命週期。 (例如,請參閱:http://static.springsource.org/spring/docs/3.0.6.RELEASE/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html) – millimoose