尝试通过 Slick 访问 MySql 数据库时出现语法错误

Posted

技术标签:

【中文标题】尝试通过 Slick 访问 MySql 数据库时出现语法错误【英文标题】:Syntax error when trying to access a MySql database via Slick 【发布时间】:2020-04-07 07:38:37 【问题描述】:

我正在尝试设置 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

它在单引号内用双引号引用表名的事实让我想知道它是否与 MySql 的 ANSI_QUOTES 选项有关,但我不确定。作为参考,这是我的 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

非常感谢任何帮助!

【问题讨论】:

因此,在服务器上将 SQL_MODE 设置为 ANSI_QUOTES 确实可以解决这个问题,但它是一个稍微次优的解决方案,因为其他人与该服务器交互并且可能没有意识到已经进行了此切换 - 如果有人有任何关于替代解决方案的想法,我很想听听。 【参考方案1】:

Slick 编写 SQL 的方式,以及如何引用字段或不引用字段,都是通过导入“配置文件”来控制的。每个关系数据库都有不同的配置文件。

如果您导入了不正确的 Slick 配置文件,您可能会看到此错误。

对于 MySQL,您的代码中应该有一个相当于:

import slick.jdbc.MySQLProfile.api._

【讨论】:

谢谢 - 我现在不能尝试,但我会尽快尝试。

以上是关于尝试通过 Slick 访问 MySql 数据库时出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Mysql play-slick 连接超时错误

无法使用 play-slick 1.0.1/slick 3.0 连接到 mysql 数据库:配置错误

尝试添加 MySQL / slick 后出现奇怪的 Play Framework 2.2 异常

Slick 2 中的多个 PostgreSQL 数据库(同一服务器)访问

如何使用 slick 创建数据库

MySQL 7.0.6-IR3 版本尝试连接数据库时出现问题