单个Android应用程序中具有多用户数据库的房间

问题描述 投票:0回答:2

我们可以使用Room在单个Android应用程序中拥有多个数据库吗?我想为每个用户创建一个新的数据库。如果user1登录,我必须为该用户创建一个数据库,如UserDB1,如果添加了任何新帐户,我必须为该用户创建另一个数据库,如UserDb2。如果帐户切换发生在那些帐户之间,我应该访问用户特定的数据库。我可以实现吗?

android database kotlin android-room accountmanager
2个回答
2
投票

也许你可以,但这种方法有几个原因是错误的。您不为用户创建具有相互关系的表的单独数据库,每行是用户的条目。 有些表具有一对多的关系,就像保存订单号的表一样。一个用户可能有很多订单。或者表格可以具有一对一的关系,如用户个人资料。它分解的是,每个用户都有一个唯一的条目和ID,该ID与其他表及其数据相关。您使用登录人员的ID来获取其数据。除此之外,你真的不应该在你的应用程序中存储其他人的数据,你觉得多人会在同一个手机上使用同一部手机的情况是什么?理想的情况是拥有一个基于云的服务器/数据库,您可以从中获取数据,因此只检索当前用户数据。 不做多个数据库的最后一个原因是,如果要添加新字段,则必须更新每个创建的数据库而不是一个。


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,但实际上我们有更多。)

  1. 为每个登录用户创建一个数据库。 (你问过,我也用过它)
  2. 只有一个数据库,但为每个用户创建一个表,例如userTable_1。 (似乎房间不能支持它)
  3. 只有一个数据库和一个表供所有用户使用,所以我们必须在表中添加一个额外的列user_id;如果我们有20个表,我们必须在所有20个表中添加“user_id”。 (我们在大多数时候都是在后端开发中完成的;但是在这种情况下,我真的不喜欢这个)
© www.soinside.com 2019 - 2024. All rights reserved.