8

我对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()吧?

4

1 回答 1

11

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

我通常会在其中获取一个可写数据库onCreate()并将结果存储SQLiteDatabase为每个活动的成员变量,并且从不显式关闭该实例。(但同样,我会在处理完它们的结果后立即关闭每个游标。)

有关该主题的更多讨论,请参阅在 Android 中管理 SQLite 连接。

于 2013-09-03T15:04:52.277 回答