在Android中关闭游标/数据库
代码如下:在Android中关闭游标/数据库,android,android-sqlite,android-cursor,android-database,Android,Android Sqlite,Android Cursor,Android Database,代码如下: 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,
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;
}
public List getXImages()
{
列表图像=新的ArrayList();
SQLiteDatabase=this.getWritableDatabase();
String sql=String.format(“从%s中选择%s、%s、%s”,
A、 B、C、表);
游标结果=database.rawQuery(sql,null);
if(result.moveToFirst())
{
做
{
字符串a=result.getString(0);
字符串b=result.getString(1);
字符串c=result.getString(2);
XImage图像=新的XImage(a、b、c);
图片。添加(图片);
}
while(result.moveToNext());
}
result.close();
close()数据库;
返回图像;
}
如果在result.close()之后
I放入database.close()代码>我得到一个运行时异常,表示它试图在连接关闭时访问SqliteDatabase
关闭光标是否也会关闭数据库连接?如果没有,我应该怎么做呢?我以前也遇到过类似的问题,在使用数据库的每个方法的末尾,我都有database.close()代码>有时会抛出异常
删除数据库.close()代码>,只保留游标close语句,这样应该没问题。我猜您是从不同的线程调用该方法
然而,在我看来,最好的做法是永远不要关闭数据库,因为SQLiteOpenHelper.getwriteabledatabase()
和SQLiteOpenHelper.getreadabledatabase()
如果未调用SQLiteOpenHelper.close()
,则始终返回相同的实例。因此,调用像您这样的方法会打乱SQLiteDatabase
实例的生命周期,从而引发异常
您可能希望签出此链接:
或SQLiteOpenHelper
的源代码:
谢谢-但原因是什么?@b85411如果关闭数据库,将无法再从中读取光标。