postgresql - 从 Slick 中的 PostgreSQL 扩展添加数据类型

标签 postgresql scala postgis slick

我正在使用 PostgreSQL 的 PostGIS 扩展,我正在尝试从表中检索 PGgeometry 对象。

这个版本工作正常:

import java.sql.DriverManager
import java.sql.Connection
import org.postgis.PGgeometry

object PostgersqlTest extends App {
  val driver = "org.postgresql.Driver"
  val url = "jdbc:postgresql://localhost:5432/gis"

  var connection:Connection = null

  try {
    Class.forName(driver)
    connection = DriverManager.getConnection(url)

    val statement = connection.createStatement()
    val resultSet = statement.executeQuery("SELECT geom FROM table;")

    while ( resultSet.next() ) {
      val geom = resultSet.getObject("geom").asInstanceOf[PGgeometry]
      println(geom)
    }
  } catch {
    case e: Exception => e.printStackTrace()
  }
  connection.close()
}

我需要能够使用 Slick 自定义查询来做同样的事情。但是这个版本不起作用:

Q.queryNA[PGgeometry]("SELECT geom FROM table;")

并给我这个编译错误

Error:(50, 40) could not find implicit value for parameter rconv: scala.slick.jdbc.GetResult[org.postgis.PGgeometry]
  val query = Q.queryNA[PGgeometry](
                                   ^

有没有一种简单的方法可以在 Slick 中添加 PGgeometry 数据类型,而无需将返回的对象转换为 String 并解析它?

最佳答案

要成功使用它,您需要定义一个 GetResult,如果您想将它插入/更新到 db,可能还需要定义一个 SetParameter

这是从 slick tests 中提取的一些代码(附注:我假设您使用的是 slick 2.1.0):

implicit val getUserResult = GetResult(r => new User(r.<<, r.<<))
case class User(id:Int, name:String)

val userForID = Q[Int, User] + "select id, name from USERS where id = ?"

但是,如果你的 java/scala 类型是 jts.Geometry 而不是 PGgeometry,你可以尝试使用 slick-pg,它内置了对 jts.GeometryPostGISslick Lifted 和 Plain SQL 的支持。

关于postgresql - 从 Slick 中的 PostgreSQL 扩展添加数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312991/

相关文章:

mysql - 如何区分查询集,同时选择不同领域所需的内容? Django

node.js - 我想找到从一个位置到另一个位置的距离并找到最近的位置

postgresql - 带有 GlassFish 4 和 PostGIS 的 JPA 实体

sql - PostgreSQL 中的 GROUP BY 和 COUNT

postgresql - 带有嵌入式 Postgres 的 GnuCobol 的源程序类型是什么

sql-server - Postgresql - 从 CTE 输出更新 CTE 结果?

mysql - 读取端延迟和响应能力

Scala 等价于自定义类的 Range 方式

scala - Slick:Codegen 外键引用

postgresql - PostGIS 中的 K 最近邻查询