我使用Scala和JDBC,现在我想重用PreparedStatement
来进行多插入。我想在数组上使用foreach-loop,但是我无法使用Scala。
val stmt = conn.prepareStatement(insertStatement)
// wrong Scala
items.foreach(item : MyItem =>
stmt.setInt(1, item.id)
stmt.setInt(2, item.value)
stmt.executeUpdate()
)
items
是一个包含多个MyItem
。
如何在Scala中编写此foreach循环并重用PreparedStatement
?
答案 0 :(得分:19)
如果您希望将大括号解释为多语句块(您可以这样做),则需要使用大括号作为foreach
的参数。
除此之外,你正在做的事看起来很好。这是一个REPL会话,我以类似的方式改变foreach块中的对象(为简单起见,使用StringBuilder):
scala> val sb = new java.lang.StringBuilder
sb: java.lang.StringBuilder =
scala> val items = List("tinker", "tailor", "soldier", "spy")
items: List[java.lang.String] = List(tinker, tailor, soldier, spy)
scala> items.foreach { item =>
| sb.append(item)
| sb.append("; ")
| println(sb)
| }
tinker;
tinker; tailor;
tinker; tailor; soldier;
tinker; tailor; soldier; spy;
(使用foreach块的括号会导致错误<console>:3: error: ')' expected but '.' found.
)
答案 1 :(得分:11)
小点,但Andrzej的回答可以通过更加自由地使用中缀符号来清理:
val sb = new java.lang.StringBuilder
val items = List("tinker", "tailor", "soldier", "spy")
items foreach { item =>
sb append item
sb append "; "
println(sb)
}
通常,使用中缀表单进行收集操作(例如map
,flatMap
,foreach
和filter