【问题标题】:Storing/retrieving BYTEA and BLOB with Java/Scala: "java.sql.SQLFeatureNotSupportedException"使用 Java/Scala 存储/检索 BYTEA 和 BLOB:“java.sql.SQLFeatureNotSupportedException”
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,这也有效,这比我的建议好得多!我刚刚搜索了错误的 groupId,在 groupId="postgresql" 下只有不推荐使用的东西不起作用......但是“org.postgresql”包含最新的东西,现在一切正常。谢谢。
    【解决方案2】:

    结果证明解决方案相当简单:

    • 直接从项目页面下载最新版本的 JDBC 驱动程序:

    http://jdbc.postgresql.org/download.html

    • 在play项目的根目录下创建'lib'目录,把jar放在那里。
    • 从 build.sbt 脚本中删除依赖项。

    因此,问题在于 Maven 存储库中的最新内容已过时且出现故障:这只是一个分发问题。做一个例外,手动管理这个依赖,然后它应该可以工作。

    编辑:另一个答案要好得多。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2020-09-19
      • 2010-10-12
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多