如何使用Joda DateTime日期作为Room中的ID,或如何在查询中获取日期?

时间:2019-05-09 03:58:55

标签: android sql jodatime android-room android-jodatime

我需要编写一个使用日期作为id的应用程序,而且我必须能够仅通过比较日期来进行更新

@Entity
data class DailyCount(@PrimaryKey
                  var date:DateTime,
                  var summ: Double = 0.0)

这是DAO

@Query("update DailyCount set summ = :sum where date = :today")
fun updateCash(today: DateTime, sum: Double)

我要这样做:

@Entity
data class DailyCount(@PrimaryKey
                  var date:Date,//JodaTime containing only date
                  var summ: Double = 0.0)

或者这样:

@Query("update DailyCount set summ = :sum where date.today = :dateArg.today")
fun updateCash(dateArg: DateTime, sum: Double)

2 个答案:

答案 0 :(得分:2)

Room不知道如何将主字段DateTime保存到数据库中。

您需要编写一个TypeConverter。

public class TypeConverter {
    private static Gson gson = new Gson();

    @TypeConverter
    public static DateTime stringToDate(String data) {

        Type type = new TypeToken<DateTime>() {
        }.getType();

        return gson.fromJson(data, type);
    }

    @TypeConverter
    public static String dateToString(DateTime dateTime) {
        return gson.toJson(dateTime);
    }
}

然后注释您的主键

@PrimaryKey
@TypeConverters(TypeConverter::class.java)
var date:DateTime

答案 1 :(得分:0)

我需要编写此查询:

@Query("update DailyCount set summ = :sum where date between  :startTimeOfDay and :endTimeOfDay")
fun updateCash(startTimeOfDay: DateTime, endTimeOfDay: DateTime, sum: Double)

我在这里给出了开始时间和结束时间的范围。当我想在今天的ID中设置信息时,此方法返回true