我正在使用 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.Geometry
和 PostGIS
的 slick
Lifted 和 Plain SQL 的支持。
关于postgresql - 从 Slick 中的 PostgreSQL 扩展添加数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312991/