让数据库始终处于打开状态是否安全?是否需要碰撞检测?
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) 为了以防万一,万一发生意外,我如何安全地执行安全的数据库关闭?
当应用程序崩溃时,它无能为力,因为它不再是 运行。
只要您保持数据库打开,它就仍然存在。
只有在您怀疑其他人正在删除数据库时,在您的应用 运行 时尝试(重新)重复创建数据库才有意义。
保证持久性的边界不是数据库连接而是事务。
在 SQLite 中,事务的设计使得即使应用程序在事务期间崩溃,数据库也处于一致状态(即,未提交的事务在随后打开数据库时回滚)。
现在,为了确保我始终写入正确且功能正常的数据库,每次访问数据库进行数据插入时,我都会调用以下 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) 为了以防万一,万一发生意外,我如何安全地执行安全的数据库关闭?
当应用程序崩溃时,它无能为力,因为它不再是 运行。
只要您保持数据库打开,它就仍然存在。
只有在您怀疑其他人正在删除数据库时,在您的应用 运行 时尝试(重新)重复创建数据库才有意义。
保证持久性的边界不是数据库连接而是事务。 在 SQLite 中,事务的设计使得即使应用程序在事务期间崩溃,数据库也处于一致状态(即,未提交的事务在随后打开数据库时回滚)。