select 查询的 Scala Slick 执行错误

Scala Slick Execution error on select query

我正在对登录系统的数据库进行简单的 select 查询。我应该从数据库中获取一条记录,然后比较密码,但我正在努力让这部分工作主要是为了让 select 查询成为我需要的 return。这就是我的

 def example() = Action.async {

    val myquery=sql"""SELECT password,id,email from profiles where email=hetmam@yahoo.com""".as[(String,Int,String)]


    dbcall.run(myquery.map { Result =>

      Result.headOption match {
        case d: (String, Int,String) =>
          if (BCrypt.checkpw("mypassword", d._1)) {
            Ok("it worked")
          }
          else
            Ok("No match")

        case None => Ok("Empty")
      }
    }

  }

此代码有效,但未 return 返回正确的格式,它给我一个错误说明:

[MatchError: Some(($2a$12$HoNBl1DBlH.X,32,hetmam@yahoo.com)) (class scala.Some) ]

请注意,上面是我想要的正确值,但是我想严格获取第一列:我认为我在这里做的密码...

BCrypt.checkpw("mypassword", d._1)

但是我一直在 Result.headOption 匹配 上收到匹配异常错误,难道 d._1 不应该只给出 `password 列值吗?

Result.headOption 返回 Option[(String, Int, String)],但您匹配的是 (String, Int, String)。你可以尝试这样的事情,而不是:

 Result.headOption match {
    case Some((password, _, _)) =>
      if (BCrypt.checkpw("mypassword", password)) {
        Ok("it worked")
      } else {
        Ok("No match")
      }

    case None => Ok("Empty")
  }
}

case Some((password, _, _))中,我们调用元组的第一个成员password,我们使用通配符_实质上忽略了元组的第二个和第三个成员。然后,在右侧,我们可以参考 password 而不是 d._1