我们可以在使用Room的单个android应用中拥有多个数据库吗?我想为每个用户创建一个新的数据库。如果user1登录,则必须为该用户创建一个数据库,例如UserDB1,如果添加了任何新帐户,则必须为该用户创建另一个数据库,例如UserDb2。如果在两个帐户之间发生帐户切换,我应该访问用户特定的数据库。我该如何实现?
答案 0 :(得分:2)
也许可以,但是由于多种原因,这种方法是错误的。您不必为用户创建单独的数据库,而是创建相互关联的表,每一行都是用户的条目。
某些表具有一对多关系,例如包含订单号的表。一个用户可能有很多订单。或者表可能具有一对一的关系,例如用户个人资料。它分解为,每个用户都有一个唯一的条目和ID,该ID将与其他表及其数据相关联。您使用登录用户的ID来获取其数据。
除此之外,您真的不应该在您的应用程序中存储其他人的数据,在什么情况下您会感觉到多个人将为该应用程序使用同一部手机?理想的情况是拥有一个基于云的服务器/数据库,您可以从中获取数据,以便仅检索当前用户的数据。
不使用多个数据库的最终原因是,如果要添加一个新字段,则必须更新创建的每个数据库,而不仅仅是一个数据库。
答案 1 :(得分:0)
我是这样的,
private static AppDatabase buildDatabase(final Context appContext, int userId) {
return Room.databaseBuilder(appContext, AppDatabase.class, DATABASE_NAME + "_" + userId)
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
}
})
.build();
}
我完全理解您的要求。有3种方法, (假设只需要一个表userTable,但实际上我们还有更多。)