我有一个完成所有数据库访问的类。它包含对 SQLiteDatabase 的引用。大约 30 个函数如下所示:
public boolean updateSomething(long a, int b, long c) {
ContentValues values = new ContentValues();
values.put(COL_A, a);
...
return database.update(TABLE, values, COL_ID + "=?", new String[]{id}) > 0;
}
许多 StackOverflows 建议这样做:
public boolean updateSomething(long a, int b, long c) {
SQLiteDatabase database = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_A, a);
...
boolean success = database.update(TABLE, values, COL_ID + "=?", new String[]{id}) > 0;
database.close();
return success;
}
但我也有精确返回游标的函数,因为我需要一个游标在我的数据库的 10k 行上,并且不能只是将内容复制到数组并关闭数据库。
其他人说在中打开数据库onResume
并关闭它,onPause
但这意味着将数据库代码移动到活动或将数据库作为所有这些函数中的参数。然后我又该如何处理与我的活动并行运行的 AsyncTasks 和其他类。
我的方法是在我的主 Activity 中打开数据库并在销毁时关闭它,然后我意识到它可能会被创建多次,所以我计算了实例。然后我意识到它可能会被破坏,而另一个 Activity 依赖于拥有一个数据库,这就是我现在卡住的地方。应用程序没有可用于连接和关闭数据库的 onStart/Stop 回调。
在Android 中:如何关闭从类返回到活动的游标,甚至建议不要费心关闭数据库。这是明智之举吗?我的意思是这就是我开始的方式,LogCat 让我担心并执行上述操作。除了一些日志输出之外,从不关闭数据库的缺点是什么?