我正在Android应用程序中使用SQLite3从Bluetooth LE进行数据存储。使用SQLite时会发生两次:
我的问题是:这是正确的解决方案吗?是否可以打开连接?例如,我不会通过某些系统清理程序删除最后存储的数据。另外,我想在应用程序开发期间查看我的所有数据。我在服务中的onDestroy方法中调用关闭连接,但是我读到不建议释放它。
@Override
public void onDestroy() {
if(writableTestbedDb != null){
writableTestbedDb.close();
}
if(testbedDbHelper != null) {
testbedDbHelper.close();
}
Log.w(TAG, "SERVICE DESTROYED");
this.stopSelf();
super.onDestroy();
}
我使用单例设计模式进行数据库连接。
public static TestbedDbHelper getInstance(Context context) {
if (mInstance == null) {
mInstance = new TestbedDbHelper(context.getApplicationContext());
}
mInstance.setWriteAheadLoggingEnabled(false);
return mInstance;
}
答案 0 :(得分:0)
发生这种情况是因为您使用预写日志记录。我看到您有禁用它的代码,但是仍然可以使用它。但是,这些文件(wal和shm)通常都可以,并且没有任何问题。 但是,如果要确保只有一个文件(.db),则可以在代码中的某个位置执行:
pragma wal_checkpoint
以确保所有内容均已清除。例如,您可以在打开数据库实例后立即执行此操作。这样会将上次未保存的所有数据保存到主文件中。