【问题标题】:Scala Slick Execution error on select query选择查询上的 Scala Slick 执行错误
【发布时间】:2016-02-09 09:48:04
【问题描述】:

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

 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 不是假设只给出 `password 列值吗?

【问题讨论】:

    标签: scala playframework slick slick-3.0


    【解决方案1】:

    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

    【讨论】:

    • 非常感谢刚刚实现它并且它正在工作
    猜你喜欢
    • 2016-11-21
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多