2

フィールドを binary(64) としてデータベースに保存しています。Scala を使用して Anorm パーサーを使用して抽出しようとしています。どうすればそれができますか?

StreamAPI のドキュメントがhttp://www.playframework.org/documentation/2.0.2/ScalaAnormにあるため、私は主に ParserAPI の使用に関心があります。

4

1 に答える 1

2

申し訳ありませんが、テストする時間がありませんが、可能な解決策は次のとおりです。

最初に、列の内容をバイト配列に変換できる暗黙のトランスフォーマーを定義します。

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") * ) 
}
于 2012-08-29T22:36:25.187 に答える