【问题标题】:How to extract binary information from a database using Anorm with Scala如何使用 Anorm 和 Scala 从数据库中提取二进制信息
【发布时间】:2012-08-24 12:18:17
【问题描述】:

我将一个字段作为二进制 (64) 存储在数据库中,并尝试使用使用 Scala 的 Anorm 解析器来提取它。怎么可能?

我最感兴趣的是使用 ParserAPI,因为 StreamAPI 记录在这里:http://www.playframework.org/documentation/2.0.2/ScalaAnorm

【问题讨论】:

    标签: database scala playframework playframework-2.0 anorm


    【解决方案1】:

    抱歉,我没有时间为您测试,但这里有一个可能的解决方案。

    首先定义一个能够将列内容转换为字节数组的隐式转换器:

    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") * ) 
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-08
      • 2013-08-18
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多