【问题标题】:Slick 3.2.1 Parameter index out of range (1 > number of parameters, which is 0)Slick 3.2.1 参数索引超出范围(1>参数个数,即为0)
【发布时间】:2018-12-15 19:46:56
【问题描述】:

我正在使用 Slick 3.2.1

这是我的代码

println(s"select id from foo where email_address='${foo.emailAddress}' and id = 700")
val existsQuery = sql"""select id from foo where email_address='${foo.emailAddress}' and id = 700""".as[Long]
val result = Await.result(mysqlDbWrite.run(existsQuery), Duration.Inf).isEmpty
println(s"result ${result}")

此代码首先打印

select id from foo where email_address='foo@yahoo.com' and id = 700

然后抛出错误

Parameter index out of range (1 > number of parameters, which is 0). 

但是您可以清楚地看到,我的查询中没有任何?。我也没有设置任何参数。那么为什么会出现这个错误呢?

【问题讨论】:

  • 不要将'${foo.emailAddress}' 放在单引号中。 Slick 会将${foo.emailAddress} 视为传递给查询的参数,并将其重写为'?'。但是,由于它位于单引号内,SQL 数据库将看到将email_address 列与'?' 字符串进行比较,这不算作参数。写成email_address = ${foo.emailAddress}就行了。
  • 是的,有效。您能否以答案而不是评论的形式回复。这样我就可以将其标记为正确答案

标签: scala slick slick-3.0


【解决方案1】:

正如 Marth 指出的那样,您必须删除单引号,Slick 会自行放置。只需按原样放置参数即可

不要写'${foo.emailAddress}',而是写${foo.emailAddress}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2016-01-19
    • 1970-01-01
    相关资源
    最近更新 更多