Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上使用Room访问与SQL连接的对象_Android_Database_Kotlin_Android Room_Android Architecture Components - Fatal编程技术网

如何在Android上使用Room访问与SQL连接的对象

如何在Android上使用Room访问与SQL连接的对象,android,database,kotlin,android-room,android-architecture-components,Android,Database,Kotlin,Android Room,Android Architecture Components,我想征求您的意见,在两个表上使用LEFT JOIN后如何访问对象。我已经在外部文件file.db中定义了表,并将其加载到Android上的Room数据库中。我定义了两个表: CREATE TABLE Example ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `name` TEXT NOT NULL, `description` TEXT, `source_url` TEXT ); CREATE TABLE Examp

我想征求您的意见,在两个表上使用
LEFT JOIN
后如何访问对象。我已经在外部文件file.db中定义了表,并将其加载到Android上的Room数据库中。我定义了两个表:

CREATE TABLE Example (
`id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`name`  TEXT NOT NULL,
`description`   TEXT,
`source_url`    TEXT
);

CREATE TABLE Example_dates (
`id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`example_id`    INTEGER NOT NULL,
`color` INTEGER NOT NULL,
`date_from` TEXT,
`date_to`   TEXT,
FOREIGN KEY(`example_id`) REFERENCES `Example`(`id`)
);
我的实体是:

@Entity(
  tableName = "Example"
)
data class Example constructor(
  @PrimaryKey @ColumnInfo(name = "id") var id: Int,
  @ColumnInfo(name = "name") var name: String,
  @ColumnInfo(name = "description") var description: String?,
  @ColumnInfo(name = "source_url") var sourceUrl: String?
)

@Entity(
  tableName = "Example_dates",
  foreignKeys = arrayOf(
    ForeignKey(entity = Example::class, parentColumns = ["id"], 
     childColumns = ["example_id"]))
)
data class Example_dates constructor(
  @PrimaryKey @ColumnInfo(name = "id") var id: Int,
  @ColumnInfo(name = "example_id") var exampleId: Int,
  @ColumnInfo(name = "color") var color: Int,
  @ColumnInfo(name = "date_from") var dateFrom: String?,
  @ColumnInfo(name = "date_to") var dateTo: String?
)
Dao对象:

@Dao
interface AnimalDao {
  @Query(
    "SELECT * FROM example_dates LEFT JOIN example ON example_dates.example_id = example.id")
  fun loadAll(): Cursor
}
我正在这样构建数据库:

RoomAsset
  .databaseBuilder(context, AppDatabase::class.java, "File.db")
  .build()
有没有办法,如何以不同于游标的方式从SQL语句中获取合并数据?我曾尝试向
数据类示例中添加更多字段,但在表“预期/发现”中出现了差异,导致错误。还是基于游标的解决方案是正确的实现方式


谢谢。

好的,正如官方文件所说

“不鼓励使用游标API,因为它不能保证行是否存在或行包含什么值。”

因此,我尝试创建另一个名为exampledeail的
数据类,其中包含我需要的所有字段,在
DAO
对象中,我返回的是列表而不是光标

多谢各位