【问题标题】:How to get 'Char' values from Postgres with Anorm如何使用 Anorm 从 Postgres 获取“Char”值
【发布时间】:2013-11-30 05:17:09
【问题描述】:

我有一个 postgres 表 -

CREATE TABLE "Contest"
(
  id serial NOT NULL,
  name varchar(100) NOT NULL,
  type char(1) NOT NULL,
  status char(1) NOT NULL,
  ...
)

我正在尝试将字段值 typestatus 返回到我的 Play 2.x (Anorm) 应用程序:

 val parseContest = {
  get[Pk[Int]]("id") ~
  get[String]("name") ~
  get[Char]("type") ~
  get[Char]("status") map {
  case id~name~c_type~status =>
    Contest(id, name, c_type, status)
  }
}

并得到错误:

could not find implicit value for parameter extractor: anorm.Column[Char]

异常似乎不支持“Char”。 我应该在我的代码中更改什么?使用get[String]("status") 然后status.head 作为解决方法是一种好习惯吗?

【问题讨论】:

    标签: postgresql scala playframework-2.0 anorm


    【解决方案1】:

    我认为您可以为您的 char 列编写一个隐式转换器。看起来像这样:

    implicit def columnToChar: Column[Char] = {
        Column[Char](transformer = {
          (value, meta) =>
            val MetaDataItem(qualified, nullable, clazz) = meta
            value match {
              case ch: String => Right(ch.head)
              case _ => Left(TypeDoesNotMatch("Cannot convert " + value + " to Char for column " + qualified))
            }
        })
      }
    

    然后确保此转换器在范围内。

    我不确定该值是否为字符串,但您可以检查它并进行相应的更正。

    【讨论】:

      【解决方案2】:

      最近有关于 Anorm 的合并 PR:https://github.com/playframework/playframework/pull/2189

      【讨论】:

        猜你喜欢
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 2019-01-23
        • 1970-01-01
        • 2018-09-12
        • 1970-01-01
        相关资源
        最近更新 更多