如何 VACUUM RoomDatabase?

How to VACUUM RoomDatabase?

如何为我的应用程序 VACUUM RoomDatabase? 我围绕 Room 构建了我的整个应用程序,在某个时候,一个大 table 被定期删除,然后又被填充。

我试图用查询创建一个额外的 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

有解决办法吗?

基本上我需要的是,一旦我的 Table 完全清空,Autoincrement 再次从 1 开始。

我对数据库设计还很陌生,所以如果这违反最佳实践,请谅解。 是的:我用尽了 Google 和我所知道的所有其他平台。

非常感谢!

Is there a workaround?

在您的 RoomDatabase 子类上调用 getOpenHelper(),以获得 SupportSQLiteOpenHelper。对其调用 getWritableDatabase() 以获得 SupportSQLiteDatabase。然后,因为我认为 VACUUM returns 不是结果集,所以在 SupportSQLiteDatabase.

上调用 execSQL("VACUUM")

Basically what I need is, that once my Table gets completely emptied, Autoincrement starts at 1 again.

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

Dao 可以如下所示:

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

运行 这样的查询:

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