Play Anorm вставляет список scala в столбец текстового массива postgres

Я пытаюсь вставить List[String] в столбец postgresql типа text[]. Я полагаю, что когда вы пытаетесь вставить какой-либо список, Anorm вставляет каждого члена списка в свой собственный столбец. Я уверен, что это так, потому что я получаю исключение:

org.postgresql.util.PSQLException: ERROR: INSERT has more expressions than target columns

Что я хочу сделать, это вставить весь список в виде текста []. Мой текущий код:

def insertList(listName: String, subLists: List[String]): Long = {
DB.withConnection{implicit c =>
SQL(
  """
    INSERT INTO mailinglists(name, sublists) VALUES({listName}, {subLists})
  """)
  .on('listName -> listName, 'subLists -> subLists)
  .executeInsert(scalar[Long] single)
}
}

Я пытался пойти по этому пути:

ConnectionPool.borrow().createArrayOf("text", subLists.toArray)

Но я получаю ошибку:

type mismatch;
found   : (Symbol, java.sql.Array)
required: anorm.NamedParameter

2 ответа

Код, который закончил работать для этой проблемы:

def insertList(listName: String, subLists: List[String]): Long = {
DB.withConnection{implicit c =>
  SQL"INSERT INTO mailinglists(name, sublists) VALUES($listName, ARRAY[$subLists])"
  .executeInsert(scalar[Long] single)
}
}

Что изменилось по сравнению с оригинальным постом, так это использование SQL-строки с интерполяцией Anorm "..." и добавление ARRAY[...] вокруг многозначного параметра. Я не совсем уверен, почему это сработало, поскольку исключения postgres были очень загадочными.

Значения, передаваемые в качестве параметров в Anorm, не должны быть необработанными значениями JDBC. Вы не должны проходить java.sql.* ценности; Вы можете взглянуть на сопоставления параметров.

Затем вы передаете имена параметров как Symbol, которая устарела в Anorm 2.3 и больше не поддерживается с 2.4. Имена должны быть переданы как String,

Массив SQL может быть передан как Array[T], с T поддерживается как тип параметра.

Вы также можете посмотреть документацию о многозначных параметрах.

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