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
。
我正在对登录系统的数据库进行简单的 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
。