数据库
首页 > 数据库> > Android SQLite DB必须关闭哪些对象

Android SQLite DB必须关闭哪些对象

作者:互联网

我在Android应用程序中使用SQLite DB.我无法100%确定在完成对数据库的读/写操作后必须关闭哪些数据库对象:

例如此代码:

public int getLocalSavedPartsAmount() {
    int partsAmount;
    PartsAppDbHelper dbHelper = new PartsAppDbHelper(context);
    SQLiteDatabase db = dbHelper.getReadableDatabase();

    String[] columns = {...};
    Cursor cursor = db.(...);
    partsAmount = cursor.getCount();

    //which one do I have to close here?
    cursor.close(); //1
    dbHelper.close(); //2
    db.close(); //3

    return partsAmount ;
}

我需要关闭1、2和3吗?关闭顺序重要吗?

解决方法:

完成游标后,应始终关闭它,游标还要求数据库已打开.

您实际上根本不需要关闭数据库.

dbHelper.close关闭数据库.

当您调用getWritableDatabase或getReabableDatabase(无论如何通常都会得到一个可写数据库)时,它将打开数据库并对其进行缓存,因此通常使用相同的打开方式,直到关闭它.

打开数据库可能会非常繁琐,因此您应尽量减少关闭,这样就不必再次打开它.

Cusror,每个都有一个基础文件槽.文件插槽受到限制,请全部使用它们,应用程序将崩溃.

所以

public int getLocalSavedPartsAmount() {
    int partsAmount;
    PartsAppDbHelper dbHelper = new PartsAppDbHelper(context);
    SQLiteDatabase db = dbHelper.getReadableDatabase();

    String[] columns = {...};
    Cursor cursor = db.(...);
    partsAmount = cursor.getCount();

    //which one do I have to close here?
    cursor.close(); //1
    return partsAmount ;
}

就足够了.

标签:sqlite,android-sqlite,android,database
来源: https://codeday.me/bug/20191108/2005374.html