将NULL与不存在分开

时间:2013-12-24 13:50:04

标签: scala playframework anorm

我有一个代码选择:

val requestId = 123
DB.withConnection { implicit con =>
  SQL("SELECT my_field FROM my_table WHERE some_id = {request_id}").onParams(requestId)()
   .collect {
      case Row(myField: Option[String]) =>
        myField match {
          case Some(x) =>
            // ???   

          case None => //there is no such a record?
         }
      }
  }

my_field可以是NULL。因此有3种选择:

  1. 记录WHERE some_id = request_id不存在
  2. 记录WHERE some_id = request_id存在并具有值
  3. 记录WHERE some_id = request_id已存在且为NULL
  4. 如何分开1和3?

1 个答案:

答案 0 :(得分:1)

我对Anorm的经验很少,因为我已经加入了Slick的行列,但我认为你可以通过这种方式区分你的情况(按顺序):

  1. 你收到一个空集合。
  2. 你得到一个Some
  3. 你得到一个None
  4. 所以我猜你会这样匹配:

            myField match {
              case Seq() => //the record doesn't exist
              case Some(x) => //unpack x because you found something    
              case None => //the record exists but some_id = NULL
             }
    

    查看Anorm文档,了解您获得的收集类型。 List确实实现了Seq特征。