#scala #intellij-idea #playframework #anorm #playframework-2.3
#scala #intellij-идея #playframework #анорм #playframework-2.3
Вопрос:
Я разрабатываю приложение с Scala (2.11) и Play Framework (2.3.0) на IntelliJ IDEA. Я использую Anorm для извлечения данных из моей базы данных (MySQL с MariaDB).
Вот мое первое тестовое приложение (оно работает):
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
«. Насколько я знаю, строка определена в библиотеке Anorm, как и SQL. Не имеет смысла, что SQL будет найден, а не строка…
Что происходит?
Комментарии:
1. Компилируется ли он с sbt?
2. Не могу сказать, почему он не может разрешить
Row
, поскольку он является частьюanorm
пакета (и моя чистая ненависть к IDE). Но вам все равно следует попробовать API синтаксического анализатора (последняя часть документации), а не сопоставление с образцом: playframework.com/documentation/2.3.x/ScalaAnorm3. Кристиан> Да, я предполагаю, что это так, поскольку я создал проект с помощью Typesafe Activator, который включает sbt, и
anorm.SQL
работает нормально. LimbSoup> Спасибо. Я выполнил базовый тест с API синтаксического анализатора, и, похоже, он работает правильно. Однако, поскольку я не в первый раз сталкиваюсь с проблемами с внешними библиотеками и импортом (я фактически прекратил попытки использовать Scala Slick по аналогичным причинам перед переключением на Anorm), было бы здорово, если бы я мог найти ответ на вопрос, почему строка не разрешена.
Ответ №1:
анорм.В Play 2.3 нет экстрактора строк. Как и предполагалось, вы могли бы использовать синтаксический анализатор.
Комментарии:
1. О, ну это объясняет это. Спасибо, я уже начал использовать API синтаксического анализатора, и он работает хорошо.