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



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

我做错了什么?

?出现在您的结果语句中并没有错。它只是一个参数化查询,每个?表示未来值的占位符。

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

最新更新