0

我正在尝试使用 scalikejdbc 访问包含数组字段的架构,即

CREATE TABLE foo (
  id         INTEGER      PRIMARY KEY,
  events     TEXT[]       NOT NULL
);

我在文档或示例中找不到关于数组的任何内容,我只能通过查看 scalikejdbc 源来猜测。

我的模型看起来像

case class Foo(id: Long, events: Array[String])

object Foo extends SQLSyntaxSupport[Foo] with ShortenedNames {
  override val columnNames = Seq("id", "events")
  private val s = syntax("s")

  private def apply(sp: SyntaxProvider[Foo])(rs: WrappedResultSet): Foo = apply(sp.resultName)(rs)

  private def apply(rn: ResultName[Foo])(rs: WrappedResultSet): Foo = Foo(
    id          = rs.get(rn.id),
    events      = rs.get(rn.events)
  )

  // ...
}

编译器抱怨

erroneous or inaccessible type events      = rs.get(rn.events)
                                                   ^

如果我将提取器代码更改为

events      = rs.array(rn.events).getArray.asInstanceOf[Array[String]]

它编译得很好,但我得到运行时异常

Execution exception[[UnsupportedOperationException: null]]

那么如何使用 scalikejdbc 访问数组字段呢?

4

2 回答 2

1

我发现应该将结果转换为Buffer

events      = rs.any(rn.events).asInstanceOf[Buffer[String]]
于 2014-08-26T07:59:52.697 回答
1

您使用的是哪个 RDBMS?我猜UnsupportedOperationException是你的 JDBC 驱动程序实现抛出的。我只是尝试了一个简单的示例,java.sql.Array通过简单地java.sql.Array#getArray()与 H2 数据库一起使用来从 value 中提取 Array 值,它工作正常。

于 2014-08-27T08:22:43.887 回答