java - 使用 Java/Scala 存储/检索 BYTEA 和 BLOB : "java.sql.SQLFeatureNotSupportedException"

标签 java postgresql scala jdbc

情况如下:我正在尝试在 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()
}
} 

其中“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 完全失效了,我应该切换到其他数据库吗? 在 Java 中使用 Postgres 是不是一个坏主意? 我的 postgres 版本是 9.3 但我使用的是 JDBC 9.1-x,这有什么关系吗?

如果有人告诉我我做错了什么以及如何让它发挥作用,我将非常感激。

PS: ...尝试 git-clone pgjdbc。它需要 ant 1.4.1 来构建。这个 ant 版本已经有大约 8 年历史了,并且在 Apache 基金会的网站上不再可用。是不是有点诡异?

最佳答案

这似乎是最新的,不是吗?

“org.postgresql”%“postgresql”%“9.3-1100-jdbc41”

关于java - 使用 Java/Scala 存储/检索 BYTEA 和 BLOB : "java.sql.SQLFeatureNotSupportedException",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24418068/

相关文章:

java - 有没有用于域名查找的java库?

scala - 错误 : scala: No 'scala-library*.jar' in Scala compiler library

python - Django - 注释按日期分组的不同值的 Count()

sql - 计算包括 0 连接两个具有不同行 postgres 的表

java - 仅在运行jar文件时发生空指针异常 - Scala Spark

scala - Monads 在实践中作为 Monoids

java - Android - 编辑操作栏按钮文本

java - 从 Java 上的字符串中获取第一个数字

java - TreeNode 的 Tic Tac Toe 解决方案

java - EclipseLink - 向 Postgres 添加索引