我正在使用会议室数据库,我想查询表列为kotlin Tuple。有人可以帮我吗?
所以我有一个名为User
的表,它具有多个字段,现在我要查询2个特定的字段first_name
和last_name
和Kotlin Tuples(Pair)
@Entity(tableName = "user")
data class User(
var id: String,
var first_name: String,
var last_name: String
// some other fields
)
@Dao
interface UserDao {
@Query("SELECT first_name as first, last_name as second FROM user WHERE id = :id")
fun getUserName(id: String): Pair<String, String>
}
我遇到如下编译错误:
Not sure how to convert a Cursor to this method's return type (kotlin.Pair<java.lang.String,java.lang.String>)
答案 0 :(得分:1)
这是实现它的方法。
为元组创建类。包括所有要获取的字段。在您的情况下,名字和姓氏是字段。这个概念称为返回列的子集。
UserNameTuple
data class UserNameTuple(
@ColumnInfo(name = "first_name") val firstName: String?,
@ColumnInfo(name = "last_name") val lastName: String?
)
像这样设计查询:
@Query("SELECT first_name, last_name FROM user WHERE id = :id")
fun getUserName(id: String): List<UserNameTuple>
您将获得满足查询条件的数据和元组数据。
这是在应用程序中实现它的方式。
答案 1 :(得分:0)
您还可以在用户类中使用辅助构造函数,如下所示:
constructor(first_name: String, last_name: String) : this("", first_name, last_name)
或者因为您有更多字段,所以可以使用默认值来避免使用第二个构造函数,如下所示:[我放了“”,可以根据需要进行更改]:
data class User(
var id: String = "",
var first_name: String = "",
var last_name: String = ""
// some other fields
)
并像这样修改getUserName
@Query("SELECT first_name, last_name FROM user WHERE id = :id")
fun getUserName(id: String): User