java - 安卓房间: One database with multiple tables

标签 java android android-room

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

用户:

@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();

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

我收到以下错误:

Caused by: java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.

但是当我尝试拥有两个独立的数据库(例如passwords_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 {
...
}

关于java - 安卓房间: One database with multiple tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57473172/

相关文章:

java - 我正在尝试使用正则表达式提取文本,但它不起作用

android - Video_player 在 Flutter 中使 Android 模拟器崩溃

android - 使用 Room.inMemoryDatabaseBuilder() 的完美用例是什么?

java - java中Mongodb之间的查询

java - 使用volley库进行JSON解析

java - 通过 wsdl 传入最大大小为 2^256 的数字

java - 将字符串转换为 float 而不进行四舍五入java

android - 用浏览器打开网址

java - 插入 Room Persistence Library Android Studio 后获取 RowID

android - 实时数据+ View 模型+房间: Exposing a LiveData returned by query which changes over time (Through a fts search)