Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 播放框架-使用带有选项[LocalDate]\Option[LocalDateTime]的anorm_Scala_Datetime_Playframework 2.0_Anorm - Fatal编程技术网

Scala 播放框架-使用带有选项[LocalDate]\Option[LocalDateTime]的anorm

Scala 播放框架-使用带有选项[LocalDate]\Option[LocalDateTime]的anorm,scala,datetime,playframework-2.0,anorm,Scala,Datetime,Playframework 2.0,Anorm,我试图在postgres中定义一个可为空的日期字段,同时使用anorm作为到数据库的连接 我正在尝试更新一个条目: def update(id: Long, startTime: Option[LocalDate]){ SQL("""UPDATE my_table |SET start_date = {start_date} |WHERE id = {id} """.stripMargin) .on( 'id ->

我试图在postgres中定义一个可为空的日期字段,同时使用anorm作为到数据库的连接

我正在尝试更新一个条目:

def update(id: Long, startTime: Option[LocalDate]){
   SQL("""UPDATE my_table
        |SET start_date = {start_date}
        |WHERE id = {id}
      """.stripMargin)
      .on(
        'id ->id,
        'start_date -> startDate,
      ).executeUpdate()
 }
但我得到了一个编译错误,看起来anorm无法处理选项[DateTime],尽管当我配置解析器时,它可以从我这里工作:

val parser: RowParser[Info] = {
  get[Long]("id") ~
  get[Option[DateTime]]("start_date") map {
  case id ~ startTime => Info(id, startDate)
}
}

我错过了什么?
谢谢

我添加了自己的隐式定义:

implicit def rowToLocalDate: Column[LocalDate] = Column.nonNull {(value, meta) =>
   val MetaDataItem(qualified, nullable, clazz) = meta
   value match {
      case ts: java.sql.Timestamp => Right(new LocalDate(ts.getTime))
      case d: java.sql.Date => Right(new LocalDate(d.getTime))
      case str: java.lang.String => Right(fmt.parseLocalDate(str))
      case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass) )
}
}

}

以及相关参数元数据

implicit object LocalDateClassMetaData extends  ParameterMetaData[LocalDate] {
   val sqlType = ParameterMetaData.DateParameterMetaData.sqlType
   val jdbcType = ParameterMetaData.DateParameterMetaData.jdbcType
}

这使得这个把戏

我添加了自己的隐式定义:

implicit def rowToLocalDate: Column[LocalDate] = Column.nonNull {(value, meta) =>
   val MetaDataItem(qualified, nullable, clazz) = meta
   value match {
      case ts: java.sql.Timestamp => Right(new LocalDate(ts.getTime))
      case d: java.sql.Date => Right(new LocalDate(d.getTime))
      case str: java.lang.String => Right(fmt.parseLocalDate(str))
      case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass) )
}
}

}

以及相关参数元数据

implicit object LocalDateClassMetaData extends  ParameterMetaData[LocalDate] {
   val sqlType = ParameterMetaData.DateParameterMetaData.sqlType
   val jdbcType = ParameterMetaData.DateParameterMetaData.jdbcType
}

这使得这个技巧成为了一个相关的问题,它对我有效的只是更新到新版本(尚未发布)

相关的问题,它对我有效的只是更新到新版本(尚未发布)

尝试添加一个
导入JodParameterMetadata.
@Lars Arnbak[LocalDate]选项如何,需要导入其他内容吗?或者选项[LocalDateTime]可能与@cchantep重复。这并没有解决我的问题。您必须为anorm添加相关的隐式定义才能处理LocalDate。我还编辑了我的解决方案以包含ParameterMetaData类。尝试添加一个导入JodParameterMetadata的
。\u
@Lars Arnbak选项[LocalDate]如何,需要导入其他内容吗?或者选项[LocalDateTime]可能与@cchantep重复这并没有解决我的问题。您必须为anorm添加相关的隐式定义才能处理LocalDate。我还编辑了我的解决方案以包含ParameterMetaData类。是的,这将起作用。但是应该能够执行
val parser:RowParser[Info]={import JodaParameterMetaData.\uget[Long](“id”)~get[Option[DateTime](“start_date”)映射{case id~startTime=>Info(id,startDate)}
并具有所需的类型。是的。但是应该能够执行
val parser:RowParser[Info]={import JodaParameterMetaData.get[Long](“id”)~get[Option[DateTime](“start_date”)映射{case id~startTime=>Info(id,startDate)}
并具有所需的类型。