我有一个空列一个表,当查询的空列,把它扔到错误

 val row: List[(String,String)] = SQL("select top 10 Spare_Part part,Pricing_Category cat from Price_Point_Base")
                .as((str("part"))~ str("cat") map(flatten) *)

我检查了链接
https://www.playframework.com/documentation/2.0/ScalaAnorm

它只是给远来处理可空列使用类似

SQL("Select name,indepYear from Country")().map { row =>
  row[String]("name") -> row[Option[Int]]("indepYear")
}

但由于str("part")row[String]("name")更紧凑,所以我想用str("part")尝试,但如何让str("part")作品与空列?

最佳答案

如果您正在读取一个可为空的列,您确实应该将其绑定(bind)到 Option[String] 以表示它可能缺少值。 ANORM不会将其转换为null,而是将抛出一个错误。

val row: List[(Option[String], String)] =
    SQL("select top 10 Spare_Part part,Pricing_Category cat from Price_Point_Base")
       .as( get[Option[String]("part") ~ str("cat") map(flatten) *)

这是凌乱但是,如果你想为String提供一个默认值会得到困惑。我们可以做一个可重复使用的解析器,默认NULL值空字符串:
val parser: RowParser[(String, String)] = {
    get[Option[String]]("part") ~ get[Option[String]]("cat") map {
       case part~cat => (part.getOrElse(""), cat.getOrElse(""))
    }
}

然后应用它:
val row: List[(String, String)] =
    SQL("select top 10 Spare_Part part,Pricing_Category cat from Price_Point_Base")
       .as(parser *)

关于scala - 如何处理空在ANORM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25640468/

10-16 02:42