我正在使用Room数据库,在我的Dao中尝试编写一个查询,该查询将删除所有早于特定天数的记录。这是我得出的代码:
然而,当我尝试构建我的项目时,在Gradle控制台中出现错误:
@Query("DELETE FROM my_table WHERE dateFrom <= date('now','-:days day')")
fun deleteAllOlderThan(days: Int)
然而,当我尝试构建我的项目时,在Gradle控制台中出现错误:
我正在使用Kotlin,因此它也向我显示了这个错误:错误:未使用的参数:days
我的查询有什么问题吗? 更新 我还收到一个关于转换日期的错误。这是我的转换器:错误:执行任务 ':nexo:kaptDebugKotlin' 失败。 内部编译器错误。请查看日志以获取更多详细信息。
class Converter {
@TypeConverter
fun fromTimestamp(value: Long?) = value?.let { Date(it) }
@TypeConverter
fun dateToTimestamp(date: Date?) = date?.time
}
我还会用注解将它添加到我的数据库中:
@TypeConverters(Converter::class)
这里是我收到的具体错误:
无法确定如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。 e: e:private final java.util.Date dateFrom = null;
摘要
I was trying to use Converter with sealed class which in Room it causes problems, so i decided to keep my date parameter as Long.
Check Emmanuel S answer. It should be:
@Query("DELETE FROM my_table WHERE dateFrom <= date('now', '-' || :days || ' days')") fun deleteAllOlderThan(days: Int)
:days
。Room所做的就是围绕SQLite占位符进行包装。尝试使用字符串连接。 - CommonsWare