情况如下:我试图在PostgreSQL数据库中存储/检索byte []数组和BLOBS。
我使用Scala Play和Anorm,但是为了处理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()
}
}
其中'图像' column的类型为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"
(这对应于groupId,artifactId,maven POM文件中的版本)。这似乎是最近的一个。 Postgres手册告诉我,这个功能自PostgreSQL版本7.2以来一直存在。
发生了什么? PostgreSQL / JDBC是否已被弃用,不再维护? 我应该采用另一个版本来使它工作吗? 或者SQL完全死了,我应该切换到其他一些数据库? 使用Postgres与Java在某种程度上是一个坏主意吗? 在某种程度上我的postgres版本是9.3但是我使用的是JDBC 9.1-x?
如果有人告诉我我做错了什么以及如何让它发挥作用,我将非常感激。
PS: ...尝试git-clone pgjdbc。它需要ant 1.4.1来构建。这个蚂蚁版本已经有8年的历史了,不再在Apache基金会的网站上提供。难道不是很怪异吗?
答案 0 :(得分:2)
这似乎是最新的,不是吗?
" org.postgresql" %" postgresql" %" 9.3-1100-jdbc41"
答案 1 :(得分:2)
解决方案结果相当简单:
http://jdbc.postgresql.org/download.html
所以,问题是Maven存储库中最新的东西已经过时且出现故障:这只是一个分发问题。做一个例外,手动管理这个依赖,然后它应该工作。
编辑:另一个答案要好得多。