1

我需要编写一个使用日期作为 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)
4

2 回答 2

3

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
于 2019-05-09T04:38:11.640 回答
0

我需要写这个查询:

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

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

于 2019-05-09T06:43:21.227 回答