Android房间:一库多表

2022-03-23 00:00:00 android android-room java

我的应用程序有两个单独的表,一个称为用户,另一个称为密码。

用户:

@Entity(tableName = "users")
public class Users {
   // some setters and getters here
}

密码:

@Entity(tableName = "passwords")
public class Passwords {
   // some setters and getters here
}

这就是我访问数据库的方式:

usersdb = Room.databaseBuilder(this, Users.class,"mymaindb")
          .allowMainThreadQueries()
          .build();

// Then later in some other activity when I need to use passwords table

passwords = Room.databaseBuilder(this, passwords.class,"mymaindb")
          .allowMainThreadQueries()
          .build();

我遇到的问题是,在全新安装后,当我访问密码时,我无法访问用户,反之亦然。

我收到以下错误:

原因:java.lang.IlLegalStateException:Room无法验证 数据完整性。看起来您更改了架构,但忘记了更新 版本号。您只需通过增加版本即可修复此问题 数字。

但当我尝试使用两个独立的数据库(如Password_db和USERS_db)而不是mymaindb时,它完全可以正常工作。

那么,有没有一种方法可以让一个数据库下有多个表呢?如果是这样的话,我到底做错了什么?提前感谢!


解决方案

我认为您完全搞错了,Room.databaseBuilder应该只调用一次来设置数据库,并且在该数据库类中,您将构造多个表。例如:

Room.databaseBuilder(this, MyRoomDb.class, "mymaindb")
                .allowMainThreadQueries()
                .build()

和您的MyRoomDb应如下所示

@Database(
        entities = {
            Users.class,
            Passwords.class
        },
        version = VERSION
)
public abstract class MyRoomDb extends RoomDatabase {
...
}

相关文章