【问题标题】:Android Room database. Creating and dropping tables with table name as parameterAndroid 房间数据库。以表名作为参数创建和删除表
【发布时间】:2018-09-27 16:56:37
【问题描述】:

有什么方法可以创建和删除类似于“RawQuery”的表?

我尝试使用 @RawQuery 注释 (这对我来说将是完美的解决方案) 但是当我编译时,我收到一个错误,说明用 @ 注释的方法987654323@ 无法返回void

我在使用 @Query 时只允许读取 SELECT、UPDATEDELETE 语句。

我想通过传递tablename 作为参数来实现“创建或删除表”,如下所示:

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

关于如何实现这一点的任何想法?

谢谢!

【问题讨论】:

标签: android android-studio android-room


【解决方案1】:

Official doc 声明,

RawQuery 充当逃生舱口,您可以在其中在运行时构建自己的 SQL 查询,但仍使用 Room 将其转换为 对象。

RawQuery 方法必须返回 non-void 类型。 如果你想执行一个不返回任何值的原始查询,使用 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")
)

【讨论】:

    【解决方案2】:

    有趣的是,有了 Room,您不必“删除”表,这些表是根据您的实体类重新创建的(用 @Entity 注释)。

    据我所知,您通常需要删除表格,以防列发生更改或“结构”有一些更新,使用 Room,除非您更改实体的结构,否则这样做是没有意义的t 由迁移自动处理。在这种情况下,Room 让您有机会自己进行迁移。在此处查看文档:https://developer.android.com/training/data-storage/room/migrating-db-versions 但正如文档所述,请务必小心。

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多