Android 个房间从数据库中获取数据

Android rooms get data from database

我有一个 table,我也用它作为连接点。

@Entity(tableName= "table_ref", primaryKeys = ["zutatid", "rezeptid"])
data class RefZutatRezept(
    val zutatid: Int,
    val rezeptid: Int,
    val menge: String
)

我想在我的 Dao 中写一个函数,我给它一个 rezeptid 并得到所有对的“zutatid”一个“menge”。我必须为此编写自己的数据 class 还是最好的方法是什么?

Do I have to write an own data class for this or what is the best way to do it?

如果我没理解错的话,没有(但你可以),你有一个 suitable class.

假设你有

 @Query("SELECT * FROM table_ref WHERE rezeptid=:rezeptid")

然后您可以使用 table 的 class 进行检索,例如

fun theFunction(rezeptid: Int): List<RefZutatRezept>
  • 您将拥有额外的 rezeptid 值,它始终是相同的值,以及您想要的对。

当然你可以创建一个只有两个值的 class/data class 例如

data class ZutatMengePairs(
    val zutatid: Int,
    val menge: String
)

然后使用:-

 @Query("SELECT zutatid,menge FROM table_ref WHERE rezeptid=:rezeptid")
 fun theFunction(reseptid: Int): List<ZutatMengePairs>

甚至使用

@Query("SELECT * FROM table_ref WHERE rezeptid=:rezeptid")
fun theFunction(reseptid: Int): List<ZutatMengePairs>
  • 在这种情况下,您将收到一个构建警告,指出并非所有检索到的列都被使用。例如

    warning: The query returns some columns [rezeptid] which are not used by .... .ZutatMengePairs. You can use @ColumnInfo annotation on the fields to specify the mapping. You can annotate the method with @RewriteQueriesToDropUnusedColumns to direct Room to rewrite your query to avoid fetching unused columns. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: zutatid, rezeptid, menge. public abstract java.util.List<ZutatMengePairs> getZutatMengePairsAlternate();