Android 房间数据库错误 : Unused parameter: days in @Query function

标签 android sqlite kotlin android-room

我正在使用 Room 数据库,试图在我的 Dao 中编写一个查询,这将删除所有超过特定天数的记录。这是我的结论:

 @Query("DELETE FROM my_table WHERE dateFrom <= date('now','-:days day')")
fun deleteAllOlderThan(days: Int)

但是,当我尝试构建我的项目时,我的 Gradle 控制台出现错误:

error: Unused parameter: days

我使用的是 Kotlin,所以它也向我展示了这个:

Error:Execution failed for task ':nexo:kaptDebugKotlin'. Internal compiler error. See log for more details

我的查询有什么问题?

更新

我也收到有关转换日期的错误。这是我的转换器:

class Converter {
@TypeConverter
fun fromTimestamp(value: Long?) = value?.let { Date(it) }

@TypeConverter
fun dateToTimestamp(date: Date?) = date?.time
}

我还通过注释将它添加到我的数据库中:

@TypeConverters(Converter::class)

这是我得到的具体错误:

Cannot figure out how to save this field into database. You can consider adding a type converter for it. e: e:private final java.util.Date dateFrom = null;

总结

  1. 我试图将 Converter 与密封类一起使用,这在 Room 中会导致问题,因此我决定将我的日期参数保留为 Long。

  2. 检查 Emmanuel S 的回答。应该是:

    @Query("DELETE FROM my_table WHERE dateFrom <= date('now', '-' || :days || ' days')")
    fun deleteAllOlderThan(days: Int)
    

最佳答案

我认为 CW 已经为您的:days 问题给出了答案。

你的日子必须像字符串一样被引用

"-20 days"


@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
}

并将转换器添加到您的抽象数据库类中

@TypeConverters(DBConverters::class)
abstract class YourDb : RoomDatabase() {}

关于Android 房间数据库错误 : Unused parameter: days in @Query function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46747457/

相关文章:

react-native - TypeORM 与 React Native

kotlin - 如何使用不同数据类的属性更新 kotlin 数据类

android - 使用 for 循环填充 Kotlin 中的列表

android - react native 中的 "resource android:attr/fontVariationSettings not found."

ruby-on-rails - Rails应用程序无法在AWS Elastic Beanstalk上运行,sqlite3错误

android - Android 中是否有针对 "users blocking our notifications"的 API?

python ,SQL : How to update multiple rows and columns in a single trip around the database?

android - 编译项目时出现 Dagger 错误

android - 任务 ':app:packageAllLocalVersionDebugClassesForMultiDex' 执行失败

android - AppCompat v7 r21 在 values.xml 中返回错误?