gpt4 book ai didi

Android Room [SQLITE_ERROR] 使用关系和连接时出现 SQL 错误或缺少数据库

转载 作者:行者123 更新时间:2023-12-02 13:32:43 27 4
gpt4 key购买 nike

这是我的第一个问题。

我正在使用 Room 数据库构建应用程序,并尝试关注 this教程,因为我需要实现多对多关系。

但是,当我尝试构建应用程序时,我不断收到以下错误:

错误:查询有问题:[SQLITE_ERROR] SQL 错误或缺少数据库(没有这样的表:OwnerDogCrossRef)private final java.util.List dogs= null;

我的实体,带有交叉引用数据类:

@Entity(tableName = "owner_table")
data class Owner(
@ColumnInfo(name = "owner_id")
val id: String,

@PrimaryKey
@ColumnInfo(name = "owner_name", index = true)
val name: String,
// some other columns

@Entity(tableName = "dog_table")
data class Dog(
@PrimaryKey
@ColumnInfo(name = "dog_name")
val name: String
// some other columns

@Entity(primaryKeys = ["owner_name", "dog_name"])//, "move_learned_by"])
data class OwnerDogCrossRef(
val owner_name: String,
@ColumnInfo(index = true)
val dog_name: String
// some other columns

我的联结数据类:

data class OwnerWithDogs(
@Embedded val owner: Owner,

@Relation(
parentColumn = "owner_name",
entityColumn = "dog_name",
associateBy = Junction(OwnerDogCrossRef::class)
)
val dogs: List<Dog>
)

我的 DAO:

@Dao
inteface OwnerDao {
@Transaction
@Query("SELECT * FROM owner_table WHERE owner_name = :name")
fun getOwnerWithDogs(name: String): LiveData<List<OwnerWithDogs>>
}

我还将 OwnerDogCrossRef 添加到我的数据库中,如下所示:

@Database(
entities = [Owner::class, Dog::class, OwnerDogCrossRef::class],
version = 2,
exportSchema = false
)
@TypeConverters(Converters::class)
abstract class MainDatabase : RoomDatabase() {
//some logic
}

感谢您的帮助

最佳答案

转到您的 Database.kt 文件并确保交叉引用表已包含在其中的实体列表中。您的可能与下面的示例有所不同,但我希望您能看到您可能遗漏的内容。

@Database(entities = [Owner::class, Dog::class, OwnerDogCrossRef::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

...

}

这是因为 OwnerDogOwnerDogCrossRef 都是数据库需要知道的表,而 OwnerWithDogs 只是要加入事务中的相关表,因为将运行多个查询,根据 documentation .另见 here用于显示如何包含特定数据库的实体的数据库文档。

关于Android Room [SQLITE_ERROR] 使用关系和连接时出现 SQL 错误或缺少数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60356514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com