如何VACUUM RoomDatabase?

时间:2018-02-28 13:02:42

标签: android performance android-room

如何为我的应用程序取消RoomDatabase的真空? 我在Room周围构建我的整个应用程序,在某个时刻,一个大表会被删除,然后再次填充。

我尝试使用Query创建一个额外的DAO接口:

@Dao
public interface GenericDao {
    @Query("VACUUM")
    void vacuum();
}

但我收到错误:

Error:(13, 10) error: UNKNOWN query type is not supported yet. You can use:SELECT, UPDATE, DELETE

有解决方法吗?

基本上我需要的是,一旦我的桌子完全清空,自动增量再次从1开始。

我对数据库设计还不熟悉,所以请理解这是否违反了最佳实践。 是的:我已经筋疲力尽了Google以及我所知道的所有其他平台。

非常感谢提前!

2 个答案:

答案 0 :(得分:2)

Dao可以看起来如下:

@Dao
public interface RawDao {
    @RawQuery
    int vacuumDb(SupportSQLiteQuery supportSQLiteQuery);
}

运行如下查询:

rawDao.vacuumDb(new SimpleSQLiteQuery("VACUUM"));

答案 1 :(得分:0)

  

有解决方法吗?

getOpenHelper()子类上致电RoomDatabase,获取SupportSQLiteOpenHelper。在其上调用getWritableDatabase()即可获得SupportSQLiteDatabase。然后,由于我认为VACUUM不返回结果集,请在execSQL("VACUUM")上调用SupportSQLiteDatabase

  

基本上我需要的是,一旦我的桌子完全清空,自动增量再次从1开始。

恕我直言,你不应该对自动增量字段如何增加做出任何假设。