让数据库始终处于打开状态是否安全?是否需要碰撞检测?

Safe to leave database open at all times? Is crash detection needed?

现在,为了确保我始终写入正确且功能正常的数据库,每次访问数据库进行数据插入时,我都会调用以下 createDB 函数(发生在15 秒间隔):

protected void createDB(String dbName){
    // clear the singleton if forcing a switch
    try{
        mdbHelper = new DaoMaster.DevOpenHelper(mcontext, dbName, null);
        database = mdbHelper.getWritableDatabase();
        mdaoMaster = new DaoMaster(database);
        dbSessionInstance = mdaoMaster.newSession();
    }catch (Exception e){
        System.out.println(TAG + e.getMessage());
    }
}

如果数据库不存在,这将尝试使用给定的名称创建一个数据库;如果它存在,那么它就会使用它。

我想考虑以下几种情况:

1) 当数据库应用程序崩溃时,我是否需要做任何事情来确保数据库不会被弄乱?

2) 如果我经常调用 createDB 是更好还是更坏?

3) 为了以防万一,万一发生意外,我如何安全地执行安全的数据库关闭?

  1. 当应用程序崩溃时,它无能为力,因为它不再是 运行。

  2. 只要您保持数据库打开,它就仍然存在。

    只有在您怀疑其他人正在删除数据库时,在您的应用 运行 时尝试(重新)重复创建数据库才有意义。

  3. 保证持久性的边界不是数据库连接而是事务。 在 SQLite 中,事务的设计使得即使应用程序在事务期间崩溃,数据库也处于一致状态(即,未提交的事务在随后打开数据库时回滚)。