0

我刚刚在这上面花了几个小时。我试图通过 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",

我究竟做错了什么?

4

1 回答 1

1

?您的结果语句中没有出现任何问题。它只是参数化查询,每个?代表未来值的占位符。

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

于 2018-11-12T08:54:21.880 回答