在单个android应用中具有多用户数据库的会议室

时间:2018-11-21 16:49:28

标签: android database kotlin android-room accountmanager

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

2 个答案:

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

  1. 为每个登录用户创建一个数据库。 (你问,我也用过)
  2. 仅一个数据库,但为每个用户创建一个表,例如userTable_1。 (似乎Room无法支持它)
  3. 所有用户都只有一个数据库和一个表,因此我们必须在表中添加一个额外的列user_id;如果我们有20个表,则必须在所有20个表中添加“ user_id”。 (我们大部分时间都是在后端开发中完成的;但是,在这种情况下,我真的不喜欢这样做)