安卓会议室:一个数据库,多个表

2022-09-03 17:21:46

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

用户:

@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 无法验证数据完整性。看起来你已更改架构,但忘记更新版本号。您可以通过增加版本号来解决此问题。

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

那么有没有办法在一个数据库下有多个表呢?如果是这样,那么我做错了什么?提前致谢!


答案 1

我认为你弄错了,应该只调用一次来设置数据库,并且在该数据库类中,您将构造多个表。例如: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 {
...
}

答案 2

您有几个变体如何解决此问题:

  • 添加表回来,但增加数据库的版本;

    @Database(entities={Users.class, Passwords.class}, version = 2)

  • 清理应用程序设置并构建新数据库;

只需清理应用程序缓存并尝试重新创建数据库即可。


推荐