我正在尝试将数据库迁移到使用Android的Room Architecture。但是我的应用程序中有一些复杂的sqlite View。我没有看到任何有关如何创建房间视图的信息或文档。任何人都可以给我举例或指向教程吗?
答案 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类上正确映射检索到的数据, 尽管您必须记住这种方法会破坏迁移。 为了使迁移正常进行,您必须找到一种解决方法(也许放弃视图并重新创建伪造的表可能会起作用)