2
我在數據庫中存儲字段爲二進制(64),我試圖使用Scala的Anorm分析器提取它。如何做到這一點?如何從數據庫中提取使用Anorm與Scala的二進制信息
我在使用ParserAPI最感興趣,因爲StreamAPI記錄在這裏:http://www.playframework.org/documentation/2.0.2/ScalaAnorm
我在數據庫中存儲字段爲二進制(64),我試圖使用Scala的Anorm分析器提取它。如何做到這一點?如何從數據庫中提取使用Anorm與Scala的二進制信息
我在使用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") *)
}