Синтаксическая ошибка при попытке доступа к базе данных MySql через Slick - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь настроить Slick для доступа к базе данных MySQL, но у меня возникли некоторые проблемы. Я собрал следующий код:

case class FieldValue(fieldName: String, fieldValue: String)

class FieldValues(tag: Tag) extends Table[FieldValue](tag, "FieldValues") {
  def fieldName = column[String]("fieldName")
  def fieldValue = column[String]("fieldValueID", O.PrimaryKey)
  def * = (fieldName, fieldValue) <> (FieldValue.tupled, FieldValue.unapply)
}

object SlickTest extends App {
  val db = Database.forConfig("validation_db")
  val simplesql = sql"select fieldValueID from FieldValues".as[(String)]
  val simplequeryf = db.run(simplesql)
  val simplequeryout = Await.result(simplequeryf, 1 second)
  simplequeryout.foreach(println)

  lazy val slickquery = TableQuery[FieldValues]
  val slickqueryf = db.run(slickquery.result)
  val slickqueryout = Await.result(slickqueryf, 1 second)
  slickqueryout.foreach(println)
}

Как вы увидите, он выполняет два запроса - первый использует простой SQL (и работает нормально), тогда как второй использует метод Slick. Второе, к сожалению, выдает следующую ошибку:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that c
orresponds to your MySQL server version for the right syntax to use near '"FieldValues"' at line 1

Тот факт, что он заключает в кавычки имя таблицы в одинарных кавычках, заставляет задуматься, относится ли это к опции ANSI_QUOTES MySql, но Я не уверен Для справки вот мое application.conf:

validation_db = {
  driver = "com.mysql.cj.jdbc.Driver",
  url = "jdbc:mysql://127.0.0.1:3306/validation?serverTimezone=UTC",
  user = "root",
  password = "password",
  connectionPool = disabled,
  useSSL=false
}

Любая помощь с благодарностью!

1 Ответ

1 голос
/ 07 апреля 2020

Способ, которым Slick составляет SQL, и то, как поля заключаются в кавычки или нет, контролируется путем импорта «профиля». Для каждой реляционной базы данных существует свой профиль.

Одна из возможностей состоит в том, что вы можете увидеть эту ошибку, если вы импортировали неправильный профиль Slick.

Для MySQL вам необходимо выполнить импорт в Ваш код эквивалентен:

import slick.jdbc.MySQLProfile.api._
...