在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如果关闭数据库,将无法再从中读取光标。