【问题标题】:Check that the request returned to the database检查请求是否返回到数据库
【发布时间】:2021-08-22 02:08:11
【问题描述】:

我有一个查询数据库的方法。 我想明白。如何检查表中是否有符合我条件的行?

def getMessage() = {
  val query = messages.filter(_.status === true)
  val action = query.result.head
  val result = db.run(action)
  //val sql = action.statements.head
  val temp = result.map(_.phone)
  Thread.sleep(3000)
  println(temp.toString)
 }

例如,我需要一个关于该方法如何工作的示例逻辑。

    def getMessage():String = {
     val query = messages.filter(_.status === true)
     val action = query.result.head
     val result = db.run(action)
     //val sql = action.statements.head
     val temp = result.map(_.phone)
     Thread.sleep(3000)
     
     if (temp != "null") return temp
     else return "null"
 }

【问题讨论】:

    标签: postgresql scala slick


    【解决方案1】:

    db.run 返回一个Future,因此您需要在完成时检查结果:

    db.run(action).onComplete{
      case Success(res) =>
        // Process result in res
      case Failure(e) =>
        // Handle error case
    }
    

    您永远不应该Sleep 或等待Future,所以getMessage 应该返回Future[String] 并且调用代码可以在它准备好时处理结果。

    def getMessage(): Future[String] = {
     val query = messages.filter(_.status === true)
     val action = query.result.head
     
     db.run(action)
    }
    

    更一般地,您需要查看Future 的工作原理以及如何修改结果 (map)、链接多个 Futures (flatMap) 或将多个 Futures 作为单个 @ 处理987654334@(Future.sequence)。

    一般来说,您应该尽可能长时间地在Future 中进行处理。

    【讨论】:

    • 感谢您的回答!是的,我在文档中看到有关使用睡眠方法的禁忌。我需要尝试从 map 方法返回电话值。我暂时使用睡眠。否则,我会得到 Future。您的 onComplite 方法非常好。现在我可以处理异常 NullPointException。由于应用程序逻辑,我经常会遇到这样的异常。
    猜你喜欢
    • 1970-01-01
    • 2015-03-02
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 2018-07-26
    • 2019-12-25
    相关资源
    最近更新 更多