如何使用Anorm从Postgres获取'Char'值
-
21-12-2019 - |
题
我有一个postgres表 -
CREATE TABLE "Contest"
(
id serial NOT NULL,
name varchar(100) NOT NULL,
type char(1) NOT NULL,
status char(1) NOT NULL,
...
)
我试图获取字段值 type
和 status
回到我的游戏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'不被anorm支持。我应该在我的代码中更改什么?使用它是好的做法吗 get[String]("status")
然后 status.head
作为解决方法?
解决方案
我想你可以为你的 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))
}
})
}
然后确保此转换器在范围内。
我不确定该值将是一个字符串,但您可以检查它并进行相应的更正。
其他提示
关于这一点,Anorm上最近合并了PR: https://github.com/playframework/playframework/pull/2189
不隶属于 StackOverflow