【问题标题】:Single quotes cause trouble while filtering in Slick在 Slick 中过滤时单引号会导致问题
【发布时间】:2021-06-08 18:42:17
【问题描述】:

我有如下陈述

  def create(company: Company): Future[Company] = {
    dbConfig.db.run(companies.filter(_.name === company.name).result.headOption)
}

它们会因诸如此类的异常而失败

org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement

我试图转义单引号但没有成功。

dbConfig.db.run(companies.filter(_.name === company.name.replace("'", "''")).result.headOption)

当我尝试插入这样的记录时:

val company = doSync(companies.create(Company(0, "C's company")))

我得到的例外是:

Syntax error in SQL statement "select `id`, `name` from `company` where `name` = 'C\'s company[*]'"; SQL statement:
select `id`, `name` from `company` where `name` = 'C\'s company' [42000-200]
org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "select `id`, `name` from `company` where `name` = 'C\'s company[*]'"; SQL statement:
select `id`, `name` from `company` where `name` = 'C\'s company' [42000-200]

请注意,我在 Mysql 模式下使用 H2 来运行我的测试。

【问题讨论】:

  • '我试图转义单引号但没有成功' - 你能发布你尝试的内容吗?您也可以记录已编译的查询,请参阅:stackoverflow.com/a/35846676/3298917
  • 好的,我会改写问题
  • 尝试使用额外的single quote(而不是backslash)转义它。

标签: sql scala h2 slick


【解决方案1】:

该错误表明您导入了错误的 Slick 配置文件。我对Mysql模式下的H2不熟悉。也许您需要使用 MySQL 配置文件? (如果您使用的是 MySQL,则为 H2)

【讨论】:

  • 我已经在代码中使用了mysqlProfile,我已经仔细检查过了。
  • 我可能会尝试 H2 配置文件,看看是否能解决 SQL 语法问题(即使用未修改的查询)。我认为您不需要更改有关 Slick 查询的任何内容以使其针对受支持的数据库运行。
  • 它可以尝试,但它会弄乱我的生产数据库(MySql)。这就是我在本地以 MySQL 模式运行 H2 的原因。
  • 您可以抽象出配置文件,并在本地与生产中混合使用正确的配置文件来解决这种差异。在 Essential Slick 中有一个部分:books.underscore.io/essential-slick/…
  • 感谢您的参考,我很难理解它如何在我的设置中工作:我有在数据库级别执行操作的存储库类,这是否意味着我需要在这些类中使用该特征?
猜你喜欢
  • 1970-01-01
  • 2013-06-17
  • 2020-03-22
  • 2016-01-30
  • 2021-04-25
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多