Scala 斯卡拉。播放:获取数据和测试结果

Scala 斯卡拉。播放:获取数据和测试结果,scala,playframework,slick,Scala,Playframework,Slick,我有一个sql查询,它返回两行和两列值。我想得到那个数据并检查它是否为空。我该怎么做? 我是scala的新人,有playframework,这里有人能帮我吗。 我使用模型类存储响应并以json格式显示,但我想知道如何检查数据的条件 val query= s""" select * from table""" override def map2Object(implicit map: Map[String, Any]): HierarchyEntryBillingRoleCheck = {

我有一个sql查询,它返回两行和两列值。我想得到那个数据并检查它是否为空。我该怎么做? 我是scala的新人,有playframework,这里有人能帮我吗。 我使用模型类存储响应并以json格式显示,但我想知道如何检查数据的条件

val query= s""" select * from table"""

override def map2Object(implicit map: Map[String, Any]): HierarchyEntryBillingRoleCheck = {
  HierarchyEntryBillingRoleCheck(str("roleName"), oint("PersonID"))
}
现在我想知道如何检查sql返回的数据是空的还是真的,以及我想执行下一个sql查询的条件

因此,我尝试了一些在类型转换中出错的方法:

override val singleQuery = s"""select * from Sitable"""
override val allQuery= s"""select * from Sitable1"""
override def map2Object(implicit map: Map[String, Any]): HierarchyEntryBillingRoleCheck = {
  HierarchyEntryBillingRoleCheck(str("roleName"), oint("PersonID"))
}

def map2ObjectBilling(implicit map: Map[String, Any]): HierarchyEntryBilling = {
  HierarchyEntryBilling(str("Name"), str("Provider"), oint("Year"), 
    ostr("Month"), ostr("Status"), ostr("ProviderType"))
}

def getAll(implicit loginName: String): Future[Seq[HierarchyEntryBillingRoleCheck]] = {
  doQueryIgnoreRowErrors(allQuery, "loginName" -> loginName)

  result.map {
    if (map2Object.roleName !="" && map2Object.PersonID.isEmpty) {
      "error"
    } else {
      getOnetask()
    }  //GEtting error with unit type cannot resolve future[seq[]]
  }

  def getOnetask(): Future[Seq[HierarchyEntryBilling]] = {
    doQueryIgnoreRowErrors(singleQuery)
  } //Getting error with type unit does not confirm Future[Seq[]]
.//doQueryignore错误签名=>

  protected def doQueryIgnoreRowErrors(query: String, args: NamedParameter*) 
   = {

 logger.debug(s"SQL: $query, args: $args")

 TimedFuture(actualityTimeout) {
  queryHandler.doQuery(query, args: _*) map { list =>
    // ignore mapping errors of specific rows
    list.flatten
   }
  } flatMap {
  case scala.util.Success(s) => Future.successful(s)
  case Failure(ex) if ex.isInstanceOf[SQLException] &&
    ex.getMessage == "The executeQuery method must return a result set." => 
  Future.successful(Nil)
  case Failure(fail)         =>
    Future.failed(fail)

请检查DoQueryIgnorRowers方法的签名 我想应该是这样的:

 def doQueryIgnoreRowErrors(sql: String, name: String): Future[Seq[HierarchyEntryBillingRoleCheck]] = {
    // next lines instead of calling data sources
    Future[Seq[HierarchyEntryBillingRoleCheck]] {
      List(HierarchyEntryBillingRoleCheck(1, "Data"))
    }
  }
我假设您得到的结果如下:

    def getAll(implicit loginName: String): Future[Seq[HierarchyEntryBillingRoleCheck]] = {

val result = doQueryIgnoreRowErrors(allQuery, "loginName")
.. 
}

如果你还在为此挣扎,请告诉我

试着做一些关于游戏/圆滑例子的研究,比如:希望这有帮助。。还有很多选项,你可以使用play提取数据,我假设你使用的是slickits,绝对不是我:)但我怀疑这是一个非常基本的问题,但有时人们会无缘无故地否决投票。你们能从表中读取数据吗???@Pavel,真的很抱歉,我不是说你们,我是在问一般的问题,从表中读取数据吗?是的,我将其映射到一个对象,并且我能够分别显示两个表中的数据,但是我仍然无法检查要满足的条件,我很可能在类型转换时出错!因此,如果您提供代码示例等,人们将很容易理解您的问题。请在问题正文中添加错误消息。我已经给出了我尝试过的完整代码,并且我需要帮助,因此您可以看到此“”如果我需要调用该方法并执行第二个querygetOnetask,那么请尝试帮助我,因为它总是会抛出错误,您必须从DoQueryIgnorRowers返回Future。所以要么你需要改变getOnetask来使用queryHandler要么重写DoQueryIgnorRowers我已经删除了getOnetask实际上我在routes中没有提到这个方法名,所以我删除了它。因此,我已经在“”中给出了完整的代码试用版,请您在这方面指导我。好吧,这一切都需要时间,我宁愿接受一些培训,如果您不理解基本概念,并且很少练习,您可能会挣扎很长时间。。你问的问题非常基本谢谢我肯定会需要它,你能告诉我一些有关scala培训的方法吗?到目前为止,我刚刚浏览了一些scala.org和谷歌搜索。有没有什么好的资源可以让我把手弄脏,这样我就能成为一名优秀的程序员