Scala Slick:无法在查询中获取参数

时间:2018-11-12 01:48:27

标签: scala jdbc slick jdbc-postgres

我刚刚花了几个小时。我试图通过Scala中的Slick在PostgreSQL中进行一个非常复杂的查询,但是Slick永远不会考虑我的任何参数。如果我尝试简单的事情:

def get(location: String) = {
  val query = sql"select * from cities_v where name = $location limit 10"
  println(query.toString)
}

输出将是:

SQLActionBuilder(Vector(select * from cities_v where name = ? limit 10),<function2>)

如果相反,我尝试直接插入:

def get(location: String) = {
  val query = sql"select * from cities_v where name = #$location limit 10"
  println(query.toString)
}

输出将是:

SQLActionBuilder(Vector(select * from cities_v where name = , ville,  limit 10),<function2>

Slick总是将任何文字参数加上逗号,无论它放在哪里,即使它是查询中的唯一参数,例如:

sql"#$q"

现在,我想通过Postgres中的计算和函数调用进行更复杂的查询。但是,鉴于Slick不会让我使用任何变量,因此我无所适从。

我尝试设置各种隐式,一些扩展了GetResult,有些扩展了StatementParameters,Slick似乎忽略了所有这些隐式,或者用?替换了我的参数,或者用逗号将它们括起来。 ,从而使我所有的查询均无效。我想补充一点,#$不好,因为它不提供清理功能。我想坚持使用Slick,因为它是异步的,但是我不确定从这里去哪里。

这些是我的版本号,根据build.sbt

"postgresql"         %  "postgresql"           % "9.1-901-1.jdbc4",
"com.typesafe.slick" %  "slick_2.12"           % "3.2.3",

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

结果语句中出现?并没有错。它只是parametrized query,每个?代表未来价值的占位符。

只需对任何数据库运行查询并检查结果即可。