每次操作数据时是否需要调用getWritableDatabase()

时间:2013-09-03 14:58:54

标签: android sqlite

我在android中有一个关于sqlite数据库的新手问题:

每次操作数据时,我是否真的需要检索可写数据库?

所以我可以像这样写一个DAO:

class Dao {

        private final SQLiteDatabase database;

        public Dao(SQLiteOpenHelper databaseHelper){

             database = databaseHelper.getWritableDatabase();
    }

    public void insert(...){

       ContentValues cv = new ContentValues(4);
       database.insertOrThrow(TABLE, null, cv);
       ...
    }


    public void update(...){
        ContentValues cv = new ContentValues(4);
        database.update(....);
    }
}

或者我必须像这样写我的道:

class Dao {

        private final SQLiteOpenHelper databaseHelper;

        public Dao(SQLiteOpenHelper databaseHelper){

             this.databaseHelper = databaseHelper
    }

    public void insert(...){

       SQLiteDatabase database = databaseHelper.getWritableDatabase();
       ContentValues cv = new ContentValues(4);
       database.insertOrThrow(TABLE, null, cv);
       ...
    }


    public void update(...){
        SQLiteDatabase database = databaseHelper.getWritableDatabase();
        ContentValues cv = new ContentValues(4);
        database.update(....);
    }
}

如果第二种方法是正确的: 每次操作后我还需要关闭数据库:

public void update(...){
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    ContentValues cv = new ContentValues(4);
    database.update(....);
    database.close();
}

对于databaseHelper.getReadableDatabase(),我猜它是一样的吗?

1 个答案:

答案 0 :(得分:9)

您应该关闭所打开的每个光标。但是每次使用后都不需要关闭数据库实例。

我通常在onCreate()中获取可写数据库,并将生成的SQLiteDatabase存储为每个活动的成员变量,并且永远不会显式关闭该实例。 (但是,一旦我完成处理结果,我就会关闭每个光标。)

有关此主题的更多讨论,请参阅Managing SQLite Connections in Android