我在Android App中使用SQLite3来存储蓝牙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;
}
出现这种情况是因为你使用了写头记录。我看到你有禁用它的代码,但不知为何你仍然使用它。尽管如此,这些文件(wal & shm)一般都是OK的,没有任何问题。但如果你想确保你只有一个文件(.db),你可以在你的代码中的某个地方执行。
pragma wal_checkpoint
以确保所有的东西都被清除了。例如,你可以在打开你的db实例后就这样做。这将会把上次未保存的所有数据保存到主文件中。