Android室数据库错误:未使用的参数:在@Query函数中的天数
我正在使用Room数据库,试图在我的Dao中写入一个查询,这将删除比特定天数更早的所有记录。 这是我来到:
@Query("DELETE FROM my_table WHERE dateFrom <= date('now','-:days day')") fun deleteAllOlderThan(days: Int)
但是,当我尝试构建我的项目时,在我的Gradle控制台中出现错误:
错误:未使用的参数:天
我正在使用Kotlin,所以它也告诉我这个:
错误:任务’:nexo:kaptDebugKotlin’的执行失败。 内部编译器错误。 查看日志了解更多详情
我的查询有什么问题?
UPDATE
我也收到有关转换日期的错误。 这是我的转换器:
class Converter { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time }
我也将其添加到我的数据库与注释:
@TypeConverters(Converter::class)
这是我得到的具体错误:
无法弄清楚如何将这个字段保存到数据库中。 你可以考虑为它添加一个types转换器。 e:e:private final java.util.Date dateFrom = null;
概要
-
我试图使用密封类的转换器在房间里,它会导致问题,所以我决定保持我的日期参数为长。
-
检查Emmanuel S的答案。 它应该是:
@Query("DELETE FROM my_table WHERE dateFrom <= date('now', '-' || :days || ' days')") fun deleteAllOlderThan(days: Int)
我想CW已经为你的天问题给出了答案。
你的日子必须像字符串一样被引用
"-20 day" @Query("DELETE FROM my_table WHERE dateFrom <= date('now', :days)") fun deleteAllOlderThan(days: String)
如果不行的concat可能会有帮助。
尝试:
@Query("DELETE FROM my_table WHERE dateFrom <= date('now', '-' || :days || ' days')") fun deleteAllOlderThan(days: Int)
对于您的转换器问题,您可能需要使用
@TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time
这工作得很好。
不要使用伴侣对象。 只是使用
class DBConverters { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time }
并将Converter添加到您的抽象数据库类中
@TypeConverters(DBConverters::class) abstract class YourDb : RoomDatabase() {}
关于错误:未使用的参数:天
目前Room使用Kotlin时无法读取参数名称。 尝试使用arg0或p0代替,如:
@Query("DELETE FROM my_table WHERE dateFrom <= date('now','-:arg0 day')") fun deleteAllOlderThan(days: Int)