【问题标题】:Scala Play 2.3.0 with Anorm - Can't use Pattern Matching (IntelliJ cannot resolve symbol Row)Scala Play 2.3.0 with Anorm - 无法使用模式匹配(IntelliJ 无法解析符号行)
【发布时间】:2014-08-07 08:42:04
【问题描述】:

我正在 IntelliJ IDEA 上使用 Scala (2.11) 和 Play Framework (2.3.0) 开发应用程序。我正在使用 Anorm 从我的数据库中检索数据(带有 MariaDB 的 MySQL)。

这是我的第一个测试应用程序(它有效):

package controllers

import play.api.mvc._
import play.api.db._
import anorm._

case class Client(id: Int, nom: String, prenom: String)

object Application extends Controller {

  def index = Action {
    var result: List[(Int, String)] = List()
    val sqlQuery = SQL(
      """
        select idClient, nameClient from Clients
        where idClient = {idClient};
      """
    ).on("idClient" -> 1)

    DB.withConnection { implicit conn =>
      result = sqlQuery().map(row =>
        row[Int]("IDClient") -> row[String]("NameClient")
      ).toList

    }
    Ok(result.toString)
  }
}

这很好用。我正确地得到了我的客户的名字。但是,当我尝试使用模式匹配时,如下所示:

result = sqlQuery().collect {
  case Row(idClient: Int, nameClient: String) => idClient -> nameClient
}

IntelliJ 给我一个错误,指出它是“Cannot resolve Symbol Row”。据我所知,Row 是在 Anorm 库中定义的,SQL 也是如此。找到 SQL 而不是 Row 是没有意义的...

发生了什么事?

【问题讨论】:

  • 用 sbt 编译吗?
  • 不能说为什么它不能解析Row,因为它是anorm 包的一部分(以及我对IDE 的纯粹仇恨)。但是您应该尝试解析器 API(文档的最后一部分)而不是模式匹配:playframework.com/documentation/2.3.x/ScalaAnorm
  • Christian > 是的,我认为确实如此,因为我使用包含 sbt 的 Typesafe Activator 构建了项目,anorm.SQL 工作正常。 LimbSoup > 谢谢。我使用解析器 API 进行了基本测试,它似乎工作正常。但是,由于这不是我第一次遇到外部库和导入问题(在切换到 Anorm 之前,我实际上出于类似原因停止尝试使用 Scala Slick),如果我能找到关于为什么 Row 不存在的答案,那就太棒了没有解决。

标签: scala intellij-idea playframework anorm playframework-2.3


【解决方案1】:

anorm.Row 提取器在 Play 2.3 中不存在。按照建议,您可以使用解析器。

【讨论】:

  • 哦,这解释了。谢谢,我已经开始使用解析器 API 并且效果很好。
猜你喜欢
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多