使用anorm将多个值插入表中

时间:2013-02-03 18:38:07

标签: scala playframework-2.0 anorm

我想从Anorm中的SQL查询向表中插入多个值。在以下代码段中,有没有办法将用户名列表绑定为值而不只是一个用户名?

SQL("insert into users (username) " +
      "values ({username})").on(
      'username -> username,
    ).executeUpdate()

作为替代方案,我可以从输入中创建一个连接字符串,但这很容易引入SQL并且不太干净。

2 个答案:

答案 0 :(得分:4)

使用Anorm:

一次插入多个值的可能方法
var fields: List[String] = Nil
var values: List[(String,ParameterValue[_])] = Nil

for ((username,i) <- usernames.zipWithIndex) {
  fields ::= "({username%s})".format(i)
  values ::= ("username" + i, username)
}

SQL("INSERT INTO users (username) VALUES %s".format(fields.mkString(",")))
  .on(values: _*)
  .executeUpdate()

答案 1 :(得分:0)

您想要为所有值重复插入命令吗?

如何将它包裹在foreach中:

usernames.foreach(username =>
  SQL("insert into users (username) " +
    "values ({username})").on(
    'username -> username,
  ).executeUpdate())

或类似的东西。

Anorm是一个相对简单的库 - 请查看此处的代码: https://github.com/playframework/Play20/tree/master/framework/src/anorm/src/main/scala/anorm