以下是代码:
public List<XImage> getXImages()
{
List<XImage> images = new ArrayList<XImage>();
SQLiteDatabase database = this.getWritableDatabase();
String sql = String.format("SELECT %s, %s, %s FROM %s",
A, B, C, TABLE);
Cursor result = database.rawQuery(sql, null);
if (result.moveToFirst())
{
do
{
String a = result.getString(0);
String b = result.getString(1);
String c = result.getString(2);
XImage image = new XImage(a, b, c);
images.add(image);
}
while (result.moveToNext());
}
result.close();
database.close();
return images;
}
如果在result.close();
之后我放了database.close();
我得到一个运行时异常,说它在连接关闭时尝试访问SqliteDatabase。
关闭游标是否也会关闭数据库连接?如果没有,我应该做些什么?
答案 0 :(得分:2)
之前我遇到过类似的问题,在每个使用数据库的方法的最后,我都有database.close();
,有时会抛出异常。
从代码周围删除database.close();
,只保留游标关闭语句,你应该没问题。
答案 1 :(得分:0)
我猜你是从不同的线程调用该方法。
但是在我看来,最佳做法是永远不会关闭数据库,因为SQLiteOpenHelper.getWritableDatabase()
和SQLiteOpenHelper.getReadablDatabase()
总是在未调用SQLiteOpenHelper.close()
的情况下返回相同的实例。所以像你这样的调用方法会弄乱SQLiteDatabase
实例的生命周期,这会增加异常。
您可能想要查看此链接:
http://touchlabblog.tumblr.com/post/24474750219/single-sqlite-connection
或SQLiteOpenHelper
的源代码: