【发布时间】:2014-06-26 05:53:44
【问题描述】:
情况如下:我正在尝试在 PostgreSQL 数据库中存储/检索 byte[] 数组和 BLOBS。
我正在使用带有 Anorm 的 Scala Play,但为了处理 BYTEA 和 BLOB,我已经回归到使用普通的旧 java.sql.Connection API 并大致遵循以下描述:
http://jdbc.postgresql.org/documentation/80/binary-data.html
我的代码如下:
def saveSmallImage(id: String, img: SmallImage): Unit = {
DB.withConnection { implicit conn =>
val ps = conn.prepareStatement(
"INSERT INTO SmallImage(id, mimeType, image) VALUES (?, ?, ?)")
ps.setString(1, id)
ps.setString(2, img.mimeType)
ps.setBinaryStream(3, img.binaryStream, img.length)
ps.executeUpdate()
ps.close()
}
}
其中 'image' 列是 BYTEA 类型,img.binaryStream 是 InputStream 类型。
我收到此错误:
java.sql.SQLFeatureNotSupportedException: Method
org.postgresql.jdbc4.Jdbc4PreparedStatement.
setBinaryStream(int, InputStream, long)
is not yet implemented.
我的 build.sbt 中有以下依赖项:
"postgresql" % "postgresql" % "9.1-901-1.jdbc4"
(这对应于 maven POM 文件中的 groupId、artifactId、version)。这似乎是最近的一个。 Postgres 手册告诉我,这个特性从 PostgreSQL 7.2 版开始就存在了。
发生了什么事? PostgreSQL/JDBC 是否以某种方式被弃用并且不再维护? 我应该采用另一个版本来使其工作吗? 还是 SQL 完全死了,我应该切换到其他数据库? 将 Postgres 与 Java 一起使用通常是个坏主意吗? 我的 postgres 版本是 9.3 但我使用的是 JDBC 9.1-x,这有什么关系吗?
如果有人告诉我我做错了什么以及如何让它发挥作用,我将非常感激。
PS: ... 试图 git-clone pgjdbc。它需要 ant 1.4.1 来构建。这个 ant 版本大约有 8 年历史,在 Apache 基金会的网站上不再提供。是不是有点诡异?
【问题讨论】:
标签: java postgresql scala jdbc