在使用sql插值的子句中

时间:2015-05-04 04:29:59

标签: scala scalikejdbc

我可以在ScalikeJDBC的SQL插值中使用in-clauses吗? e.g。

val ids = Set(1,2,3,5)
sql"""update foo set bar=${bar} where id in ${ids}""".update().apply()

此操作失败,因为ids未插入。

sql"""update foo set bar=${bar} where id in (${ids.mkString(",")})""".update().apply()

这也会失败,因为表达式被解释为String,而不是数字列表。例如... where id in ('1,2,3,5')

1 个答案:

答案 0 :(得分:5)

我没有弄明白你的问题,但插值Set值应该有效。

libraryDependencies ++= Seq(
  "org.scalikejdbc" %% "scalikejdbc"       % "2.2.6",
  "com.h2database"  %  "h2"                % "1.4.187",
  "ch.qos.logback"  %  "logback-classic"   % "1.1.3"
)
像这样:

scala> import scalikejdbc._
import scalikejdbc._

scala> val ids = Set(1,2,3,5)
ids: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 5)

scala> val s = sql"""update foo set bar=1 where id in (${ids})"""
s: scalikejdbc.SQL[Nothing,scalikejdbc.NoExtractor] = scalikejdbc.SQLToTraversableImpl@633229c7

scala> s.statement
res1: String = update foo set bar=1 where id in (?, ?, ?, ?)

scala> s.parameters
res2: Seq[Any] = List(1, 2, 3, 5)