4

Anorm の SQL クエリから複数の値をテーブルに挿入したいと考えています。次のスニペットで、1 つのユーザー名だけでなく、ユーザー名のリストを値としてバインドする方法はありますか?

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

別の方法として、入力から連結された文字列を作成することもできますが、これは SQL インジェクションが発生しやすく、きれいではありません。

4

2 に答える 2

5

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()
于 2014-09-16T06:54:18.517 に答える
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 でコードを確認してください。

于 2013-02-03T21:37:55.930 に答える