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;

概要

  1. 我试图使用密封类的转换器在房间里,它会导致问题,所以我决定保持我的日期参数为长。

  2. 检查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)