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

标签 android database kotlin android-room accountmanager

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

最佳答案

我像下面那样做了,

    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,但实际上我们还有更多。)
  • 为每个登录用户创建一个数据库。 (你问,我也用过)
  • 只有一个数据库,但是为每个用户创建一个表,比如userTable_1。 (好像Room支持不了)
  • 所有用户只有一个数据库和一个表,所以我们必须在表中添加一个额外的列 user_id;如果我们有 20 个表,我们必须将“user_id”添加到所有 20 个表中。 (我们大部分时间都是在后端开发中完成的;但在这种情况下,我真的不喜欢这个)
  • 关于android - 单个 android 应用程序中具有多用户数据库的房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416907/

    相关文章:

    kotlin - 如何创建一个基于类型或类对象生成对象的工厂?

    java - Android 时区默认返回错误值

    android - 如何在 Kotlin 数据类中使用带空格的变量

    Android Intent 类似于 Gmail 的 attach Intent

    android - ContentProvider android权限

    mysql - 使用变量更新触发器中的 SQL 语法错误

    android - Kotin lateinit Var 未初始化 - Android Studio

    java - 进程死亡时导航图作用域 ViewModel

    java - 计算具有较大 xy 值的点之间的距离

    sql - 哪种方式适合检查表是否存在