Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite DB必须关闭哪些对象_Android_Database_Sqlite_Android Sqlite - Fatal编程技术网

Android SQLite DB必须关闭哪些对象

Android SQLite DB必须关闭哪些对象,android,database,sqlite,android-sqlite,Android,Database,Sqlite,Android Sqlite,我在Android应用程序中使用SQLite DB。我无法100%确定在完成对DB的读/写操作时必须关闭哪些数据库对象: 例如,此代码: public int getLocalSavedPartsAmount() { int partsAmount; PartsAppDbHelper dbHelper = new PartsAppDbHelper(context); SQLiteDatabase db = dbHelper.getReadableDatabase();

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

例如,此代码:

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吗?关闭的顺序重要吗?

您需要关闭游标和数据库连接,它们非常重要。因为这两者都会导致应用程序内存问题

操作完成后,应先关闭光标

if(cursor != null)
    {
        cursor.close();
    }
你应该关闭数据库连接

if(db.isOpen())
    {
        db.close();
    }

希望它能对您有所帮助。

使用完光标后,您应该始终关闭光标,光标还要求数据库处于打开状态

您根本不需要关闭数据库

dbHelper.close关闭数据库

当您调用getWritableDatabasegetReabableDatabase时(这通常会得到一个可写数据库),它会打开数据库并缓存它,因此通常会使用相同的打开,直到您关闭它

打开一个数据库可能会非常密集,所以您应该尽量减少关闭,这样就不必再次打开它

Cusrors,每个都有一个底层文件槽。文件插槽有限,请全部使用,应用程序将崩溃

所以

那就足够了

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 ;
}