首页 文章

选择查询时出现Scala Slick执行错误

提问于
浏览
0

我正在为登录系统对数据库进行简单的选择查询 . 我应该从数据库中获取记录,然后比较密码,但我正在努力使该部分主要用于获取选择查询以返回我需要的内容 . 这就是我所拥有的

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

  }

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

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

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

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

但是我只是在Result.headOption匹配上得到匹配异常错误,不是d._1假设只给出`密码列值?

1 回答

  • 2

    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 .

相关问题