2015-09-04 5 views
2

Я пытаюсь использовать ScalikeJDBC для доступа к массиву в PostgreSQL 9.4. DDL:Доступ к массиву PostgreSQL через ScalikeJDBC

create table itab (
     code varchar primary key, 
     group_list varchar[] 
); 

Простой класс корпуса и загрузчик определены в приложении Scala.

case class Item(code: String, groupSet: List[String]) 

trait loader { 
    def loadAllItems: List[Item] = { 
     insideReadOnly { implicit session => 
         sql"select CODE, GROUP_LIST from ITAB" 
         .map(e => Item(
          e.string("code"), 
          e.array("group_list").asInstanceOf[Buffer[String]] 
         )).list.apply() 
        } 
    } 
} 

При запуске приложения я получаю исключение во время выполнения

java.lang.ClassCastException: org.postgresql.jdbc4.Jdbc4Array cannot be cast to scala.collection.mutable.Buffer 

Как я могу решить это? Спасибо. Hoviman.

+0

возможно, если вы вызываете '.getArray()' перед заливкой, он будет работать – DaMainBoss

ответ

3

Использование rs.array("group_list").getArray.asInstanceOf[Array[String]]

Это просто java.sql.Array под

+0

Спасибо большое за ответ! Теперь компилятор ругает тип несоответствия: найден Array [String], но List [String] требуется. Когда я изменяю тип Item.groupSet на Array [String], никакой компиляции или ошибки времени выполнения нет, но я получаю результат как строку, а не как массив [String]. – hoviman

+0

Похоже, scalikejdbc возвращает PostgreSQL varchar [] как простую строку, но не как массив строк. Я прав? А если нет, следует ли использовать неявное преобразование путем интерполяции строк? – hoviman

0

Решенный. ToList работает правильно;)

e.array("group_list").getArray.asInstanceOf[Array[String]].toList 
Смежные вопросы