Android room - 如何清除所有表的sqlite_sequence

uda*_*day 5 android android-sqlite android-room

如果用户从应用程序注销,我将使用以下命令一一清除表中的数据

@Query("DELETE FROM tableName")
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用下面的代码一一清除所有表的 sqlite_sequence 。

database = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DatabaseMeta.DB_NAME)
        .build(); 
database.query("DELETE FROM sqlite_sequence WHERE name = ?", new Object[]{"tableName"})
Run Code Online (Sandbox Code Playgroud)

不幸的是,清算sqlite_sequence不起作用。所以如果用户再次登录,那么起始rowId不会从1开始创建。

还有其他方法可以做到这一点吗?我尝试清除整个数据库,并在用户再次登录后添加新条目。

Chr*_*ris 4

Room Database 似乎不支持通过 DAO 或原始查询编辑 sqlite_sequence 表。相反,这是我解决这个问题的方法(Kotlin):

class NonRoomDb(context:Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) {
    override fun onCreate(db: SQLiteDatabase?) {}
    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {}
}

fun resetPointer(context:Context, tableName:String) {
  val nonRoomDb = NonRoomDb(context)
  nonRoomDb.writableDatabase.execSQL("DELETE FROM sqlite_sequence WHERE name='$tableName';")
  nonRoomDb.close()
}
Run Code Online (Sandbox Code Playgroud)