scala - 尝试通过 Slick 访问 MySql 数据库时出现语法错误
问题描述
我正在尝试设置 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
}
非常感谢任何帮助!
解决方案
Slick 编写 SQL 的方式,以及如何引用字段或不引用字段,都是通过导入“配置文件”来控制的。每个关系数据库都有不同的配置文件。
一种可能性是,如果您导入了不正确的 Slick 配置文件,您可能会看到此错误。
对于 MySQL,您的代码中应该有一个相当于:
import slick.jdbc.MySQLProfile.api._
推荐阅读
- angular - 每 1 秒从本地存储获取数据
- java - 避免 @Autowired 字段为空
- .net-core - 尝试激活“GraphQL.Server.Internal.DefaultGraphQLExecuter”时无法解析“xxxSchema”类型的服务
- c# - 用 C# 计算时,这个公式有什么问题?
- git - git - 合并时文件名意外重命名
- c - C 中 (*)[] 和 * 的区别
- linux - perf_event_open 和间隔计数
- python - 致命:运行 makemigrations 时用户“postgres”的密码验证失败
- javascript - 重置自动幻灯片
- c - 打印功能弄乱了链表