我将一个字段作为二进制(64)存储在数据库中,并尝试使用使用 Scala 的 Anorm 解析器来提取它。怎么可能呢?
我最感兴趣的是使用 ParserAPI,因为 StreamAPI 记录在这里:http ://www.playframework.org/documentation/2.0.2/ScalaAnorm
我将一个字段作为二进制(64)存储在数据库中,并尝试使用使用 Scala 的 Anorm 解析器来提取它。怎么可能呢?
我最感兴趣的是使用 ParserAPI,因为 StreamAPI 记录在这里:http ://www.playframework.org/documentation/2.0.2/ScalaAnorm
抱歉,我没有时间为您测试它,但这是一个可能的解决方案。
首先定义一个隐式转换器,它能够将列内容转换为字节数组:
implicit def rowToByteArray: Column[Array[Byte]] = Column.nonNull { (value, meta) =>
val MetaDataItem(qualified, nullable, clazz) = meta
value match
case data: Array[Byte] => Right(data)
case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Byte Array for column " + qualified))
}
然后你可以定义一个合适的行解析器工厂:
def bytes(columnName: String): RowParser[Array[Byte]] = get[Array[Byte]](columnName)(implicitly[Column[Array[Byte]]])
最后只需使用它:
val images:List[String~Array[Byte]] = {
SQL("select * from Image").as( str("name") ~ bytes("data") * )
}