【问题标题】:Accessing to PostgreSQL array via ScalikeJDBC通过 ScalikeJDBC 访问 PostgreSQL 数组
【发布时间】:2015-11-30 09:15:30
【问题描述】:

我尝试使用 ScalikeJDBC 访问 PostgreSQL 9.4 中的数组。 DDL:

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

我该如何解决? 谢谢。霍维曼。

【问题讨论】:

  • 也许如果你在转换之前调用.getArray(),它会起作用

标签: arrays postgresql scala data-access-layer scalikejdbc


【解决方案1】:

使用rs.array("group_list").getArray.asInstanceOf[Array[String]]

下面就是java.sql.Array

【讨论】:

  • 非常感谢您的回答!现在编译器责备类型不匹配:找到 Array[String] 但 List[String] 是必需的。当我在 Array[String] 上更改 Item.groupSet 的类型时,没有任何编译或运行时错误,但我得到的结果是 String,而不是 Array[String]。
  • 看起来 scalikejdbc 返回 PostgreSQL varchar[] 作为一个简单的字符串,而不是作为一个字符串数组。我对吗?如果没有,我应该通过字符串插值使用隐式转换吗?
【解决方案2】:

已解决。 toList 工作正常;)

e.array("group_list").getArray.asInstanceOf[Array[String]].toList

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多