Android:发布数据库连接

时间:2013-05-02 09:37:52

标签: android database sqlite

我一直在寻找一个解决方案来创建我的slqite数据库,访问同步并避免打开/关闭连接的问题,我在这个good answer中失败了:

但是,在此解决方案中,没有明确关闭数据库。 许多人认为这不是问题,但我知道如何在应用程序停止后关闭连接。

注意:在上述链接中,答案的作者建议:

  

随着我的实施,单身人生活在生命中   应用。因此我没有实现一个显式的析构函数,   相反,在应用程序关闭代码(或崩溃处理程序)数据库是   明确关闭。请参见Thread.setDefaultUncaughtExceptionHandler()   在我发布我的样本后,我在ApplicationContext.onCreate()中使用了它   代码。

这可以是一个很好的解决方案吗?如果是,我该如何管理Thread.setDefaultUncaughtExceptionHandler()?

编辑:

我还想,如果数据库资源不可用,则需求线程将等待数据库释放。我可以使用这段代码吗?不推荐使用isDbLockedByOtherThreads()

private myDatabase(){
        final DbHelper mDbHelper =new DbHelper(ApplicationFramework.getContext());   
        mDB = mDbHelper.getWritableDatabase();
        while(mDB.isDbLockedByCurrentThread() || mDB.isDbLockedByOtherThreads()) {
            //db is locked, keep looping
        }
    }

1 个答案:

答案 0 :(得分:2)

在应用程序停止后,您无需担心关闭数据库连接,它会自动关闭。

实际上内部只有一个连接,你使不同的实例成为不同的东西。这就是为什么许多人说关闭数据库连接没有任何意义。

始终拥有一个数据库连接的静态对象,它将是安全的,不会出现异常,也不用担心关闭它。

如果您尝试同时从实际的不同连接写入数据库,则最终会失败。它不会等到第一个完成然后写。它根本不会写你的改变。更糟糕的是,如果您没有在SQLiteDatabase上调用正确版本的插入/更新,则不会出现异常。您只需在LogCat中收到一条消息即可。

回答更新的查询

仅使用数据库连接的单个静态实例,无需创建其他线程,所有操作都将自动同步。