如何创建一个与Room一起使用的sqlite视图?

时间:2018-05-11 13:30:16

标签: android sql android-room

我正在尝试将数据库迁移到使用Android的Room Architecture。但是我的应用程序中有一些复杂的sqlite View。我没有看到任何有关如何创建房间视图的信息或文档。任何人都可以给我举例或指向教程吗?

2 个答案:

答案 0 :(得分:2)

您可以使用androidx.room.DatabaseView批注

文档示例:

   @DatabaseView("SELECT id, last_name FROM User")
   public class UserSummary {
       public long id;
        @ColumnInfo(name = "last_name")
       public String lastName;
   }

答案 1 :(得分:0)

到目前为止,Android Room中有一个open issue支持Fixed状态的数据库视图,也许等待创建者支持它是一个很好的选择。

尽管使用hacky方法,您可能会完成它:

您可以创建一个与视图类似的@Entity(在列中),然后在数据库的onCreate上删除为此实体生成的表。

Room
    .databaseBuilder(context, DueDatabase.class, DB_NAME)
    .addCallback(new RoomDatabase.Callback() {
       @Override
       public void onCreate(@NonNull SupportSQLiteDatabase db) {
          super.onCreate(db);
          //Drop the fake table and create a view with the same name
          db.execSQL("DROP TABLE view_name");
          db.execSQL("CREATE VIEW view_name " +
                     "AS SELECT [...]"
          );
       }
    })
    .build();

通过这种方式,房间可以让您在查询中使用视图名称,并在@Entity类上正确映射检索到的数据,  尽管您必须记住这种方法会破坏迁移。 为了使迁移正常进行,您必须找到一种解决方法(也许放弃视图并重新创建伪造的表可能会起作用)