Android Room数据库。使用表名作为参数创建和删除表。

3

有没有办法创建和删除类似于“RawQuery”的表格?

我尝试使用@RawQuery注释(这对我来说是完美的解决方案),但是在编译时,我会收到一个错误,指出用RawQuery注释的方法不能返回void

我了解到,在使用@Query时,只允许SELECT、UPDATEDELETE语句。

我想通过传递tablename作为参数来实现“创建或删除表格”的目的,类似于以下内容:

@Query("DROP TABLE :name")
void deleteTable (String name); 

有什么方法可以实现这个目标吗?谢谢!

https://www.sqlite.org/lang_droptable.html - Martin Zeitler
2个回答

3
官方文档指出,RawQuery 可以作为一个“逃生口”,使你能够在运行时构建自己的 SQL 查询语句,但仍然可以使用 Room 将其转换成对象。 RawQuery 方法必须返回一个非空类型。如果您想执行不返回任何值的原始查询,请使用 RoomDatabase#query 方法。
或者像这样使用:
@RawQuery
int deleteTable (SupportSQLiteQuery query); //We can return int status like it used to return with database.delete()

//Usage

dao.deleteTable(
        new SimpleSQLiteQuery("DROP TABLE tablename")
)

1
"The ting is, wit Room, you don't have to "drop" tables, the tables re created based on your entity classes (annotated with @Entity).
据我所知,通常情况下,如果列发生更改或“结构”有更新,您通常需要删除表格。但使用Room时,除非更改了实体的结构且无法自动处理迁移,否则没有必要这样做。在这种情况下,Room让您有机会自己进行迁移。请查阅此处的文档:https://developer.android.com/training/data-storage/room/migrating-db-versions 但正如文档所述,请务必小心操作。"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接