我正在试图"吸尘" SqLite数据库的命令
String sql = "VACUUM;" ;
if(!IsSyncTriggered()){
databaseInstance.execSQL(sql);
databaseInstance.setTransactionSuccessful();
}
我的完整课程
public class AppServiceDBClean extends WakefulIntentService {
int FIVE_MINUTES = 5*60*1000;
public AppServiceDBClean() {
super("AppService");
}
@Override
protected void doWakefulWork(Intent intent) {
// Toast.makeText(getApplicationContext(), "App services", 50000).show();
try {
doCleanUPDB();
}
catch (Exception e) {
Log.e("AppService", "Exception appending to log file", e);
}
}
public boolean IsSyncTriggered() {
boolean isActive = false;
AccountManager am = AccountManager.get(getBaseContext());
Account[] ac = am.getAccountsByType(Constants.ACCOUNT_TYPE);
if (ac.length > 0) {
isActive = ContentResolver.isSyncActive(ac[0], Constants.AUTHORITY);
}
return isActive;
}
public void doCleanUPDB(){
/**
* Create some basic instance of database interaction
*/
DaoSession daoSessionUni = TAndroidApplicationContext.getInstance().getDaoSession();
TAndroidApplicationContext tAndroidApplicationContext = TAndroidApplicationContext.getInstance();
TDatabaseLibrary tDB = TDatabaseLibrary.getInstance(tAndroidApplicationContext.getApplicationContext());
SQLiteDatabaseWrapper databaseInstance = tDB.getDatabase();
String sql = "VACUUM;" ;
if(!IsSyncTriggered()){
databaseInstance.execSQL(sql);
databaseInstance.setTransactionSuccessful();
//databaseInstance.endTransaction();
}else{
/**
* If the sync is in progress
* wait for 10 minutes and try again
* */
try {
Thread.sleep(FIVE_MINUTES);
} catch (InterruptedException e) {
Log.d("DataCleaningService","SleepException ",e);
e.printStackTrace();
}
}
}
}
IsSyncTriggered()是用户定义方法。我试图通过一个每24小时运行一次的服务来实现这一目标。但我的数据库大小并没有减少。即使某些行表格被删除,它仍然会增加。我错过了什么请帮助我。在此先感谢所有人。
答案 0 :(得分:1)
您可以启用auto_vacuum
并升级bbdd。如果您将数据与Web服务或类似内容同步,则不应该有任何问题。
如果你不能丢失数据,那么试试这个:
删除最后一个“;”从命令。我知道这可能听起来很愚蠢,但我在sqlite上恢复的所有关于真空的信息都没有它,所以也许甚至没有触发命令。
if(!IsSyncTriggered()){
databaseInstance.execSQL("VACUUM");
databaseInstance.setTransactionSuccessful();
//databaseInstance.endTransaction();
}else{
还有一个针对以前的Android版本2.3上的vacuum命令的错误报告。如果您在该版本或之前的版本上遇到此问题,则应该更多地搜索该错误。
希望它有所帮助。