Вставка нескольких значений в таблицу с помощью anorm

Я хочу вставить несколько значений в таблицу из запроса SQL в Anorm. В следующем фрагменте есть ли способ связать список имен пользователей в качестве значений вместо одного имени пользователя?

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

В качестве альтернативы я могу создать каскадную строку из своих входных данных, но она склонна к внедрению SQL и не так чиста.

2 ответа

Возможный способ вставить несколько значений одновременно, используя 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()

Вы хотите повторить команду вставки для всех значений?

Как насчет упаковки в 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

Другие вопросы по тегам