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

标签 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() 也是一样吧?

最佳答案

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

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

参见 Managing SQLite Connections in Android有关该主题的更多讨论。

关于android - 我是否需要在每次操作数据时调用 getWritableDatabase(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595482/

相关文章:

android - 我如何在 Unity 的 Android 上本地测试 AssetBundle (DLC)?

java - 不修改代码后出错

python - 如何解决无法将表名解析为 python sqlite 查询的问题?

Python SQL游标给出不同的结果?

java - 尝试运行 android 教程 Form stuff 时出现未定义错误

android - 谷歌地图 ApiV2 在 Android 2.3.7 上不断崩溃

android - 在 SQlite 中执行超过 64 个表连接的最快方法是什么?

java - Kotlin 数据库错误 CursorIndexOutOfBoundsException

objective-c - iPhone 上预加载数据库?

scala - SQLException : unknown database with SQLite and Scala