2 o 1001 o O_1001_O 于 2012.10.25 10:45 提问

android应用里出现了错误

在android应用里出现问题:

单例中的方法代码如下:

public Cursor getFooCursor(Context context)
{
    StorageDBOpenHelper helper = new StorageDBOpenHelper(context);
    SQLiteDatabase db = helper.getReadableDatabase();

    Cursor c = db.query("Foo", new String[] {"_id", "Titel"}, null, null, null, null, "Test DESC");

    return c;
}

然后就出现error:**SQLiteDatabase: close() was never explicitly called on database**

怎么避免这个错误?并且还有一个问题,不能在return c 之前 进行db.close().这样会返回空值。

3个回答

loFataMer
loFataMer   2012.10.25 14:39
已采纳

我建议不要使用单例,用下面的方法试试:

public class FooDB
{
    private SQLiteDatabase db = null;

    private void open() throws SQLiteException
    {
        if (db != null)
        {
            throw new SQLiteException("Database already opened");
        }

        // 创建开放助手
        StorageDBOpenHelper helper = new StorageDBOpenHelper(context);
        try
        {
            // 获取数据库对象
            db = m_openHelper.getWritableDatabase();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        if (db == null)
        {
            throw new SQLiteException("Failed to open database");
        }
    }

    private void close() throws SQLiteException
    {
        if (db != null)
        {
            db.close();
            db = null;
        }        
    }

    public Cursor getFooCursor(Context context)
    {
        if(db == null)
            throw new SQLiteException("Database not open");    

        Cursor c = db.query("Foo", new String[] {"_id", "Titel"}, null, null, null, null, "Test DESC");

        return c;
    }
}
Kakalapa1986
Kakalapa1986   2012.10.25 14:22

我是这样实现的:

StorageDBOpenHelper helper = new StorageDBOpenHelper(context);
SQLiteDatabase db = helper.getReadableDatabase();

public Cursor getFooCursor(Context context, SQLiteDatabase db ) {
      Cursor c = db.query("Foo", new String[] {"_id", "Titel"}, null, null, null,
 null, "Test DESC");
      return c;
 }

db.close();
ueryueryuery
ueryueryuery   2012.10.26 14:02

db使用完了关掉,cursor在使用完的地方关掉,就没有问题了。

Csdn user default icon
上传中...
上传图片
插入图片