Android:打开和关闭 SQLite 数据库

标签 android database sqlite android-sqlite

我正在开发 android 应用程序,我经常在其中使用访问本地数据库。这个数据库可以从不同的therads访问,所以我有一个数据库的协调问题。我使用以下 open()close() 方法。

public void open(){ 
    mDb=mDbHelper.getWritableDatabase();
}

public void close(){
        mDb.close();
}

所以,通常,当我需要访问数据库进行某些操作时,我会打开数据库,然后执行一些操作,最后关闭数据库。我通常用于此目的的代码如下:

    try {
        dbManager.open();
                    // database operation
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        try {
            dbManager.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

但是,如果这段代码被用于不同的线程(假设线程A和线程B),可能会出现以下情况:

A thread: performs open()
B thread: perfroms open()
A thread: perfroms some operation
A thread: performs close()
B thread: try to perform some operation but it fails!

因此,我猜想唯一的解决方案是在我的应用程序启动时执行 open() 并在我的应用程序停止时执行 close()。我不确定这是否是一个好的解决方案?

实际上,getWritableDatabase() 方法(从我的 open() 调用)的文档说:

Make sure to call close() when you no longer need the database

那么,有人可以向我推荐替代解决方案吗?

最佳答案

您可以使用单例实例,通常您可以不关闭数据库(但保持事务关闭)。有一些信息:

Android SQLite DB When to Close

关于Android:打开和关闭 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16171512/

相关文章:

android - Flutter Android TV 应用程序无法使用方向键进行选择

java Android - volley 库 - 通过 ImageLoader 获取位图

php - 如何在 laravel 中按自定义时间格式排序?

r - 如何使用 colnames 作为循环的主标题

python - csv导入sqlite3而不指定列类型

sqlite - KnexJs - Sqlite3 删除级联不起作用

android - Xamarin.Forms:单击后按钮文本对齐错误 (Android)

android - 如何将 YouTube 播放列表解析为 ListView

sql - 我没有得到数据库规范化 - 重复的 FK 不是也在重复吗?

android - 读取 Sqlite 数据库时出错 : Database google_app_measurement_local. db not found