我们可以使用Room在单个Android应用程序中拥有多个数据库吗?我想为每个用户创建一个新的数据库。如果user1登录,我必须为该用户创建一个数据库,如UserDB1,如果添加了任何新帐户,我必须为该用户创建另一个数据库,如UserDb2。如果帐户切换发生在那些帐户之间,我应该访问用户特定的数据库。我可以实现吗?
也许你可以,但这种方法有几个原因是错误的。您不为用户创建具有相互关系的表的单独数据库,每行是用户的条目。 有些表具有一对多的关系,就像保存订单号的表一样。一个用户可能有很多订单。或者表格可以具有一对一的关系,如用户个人资料。它分解的是,每个用户都有一个唯一的条目和ID,该ID与其他表及其数据相关。您使用登录人员的ID来获取其数据。除此之外,你真的不应该在你的应用程序中存储其他人的数据,你觉得多人会在同一个手机上使用同一部手机的情况是什么?理想的情况是拥有一个基于云的服务器/数据库,您可以从中获取数据,因此只检索当前用户数据。 不做多个数据库的最后一个原因是,如果要添加新字段,则必须更新每个创建的数据库而不是一个。
我这样做,如下,
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,但实际上我们有更多。)