情況如下:我試圖在PostgreSQL數據庫中存儲/檢索byte []數組和BLOBS。使用Java/Scala存儲/檢索BYTEA和BLOB:「java.sql.SQLFeatureNotSupportedException」
我使用斯卡拉與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"
(此對應的groupId,artifactId的,版本的Maven POM-文件)。這似乎是最近的一次。 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基金會的網站上找到。這是不是有點怪誕?
是的,這也適用,這比我的建議好得多! 我剛剛搜索了錯誤的groupId,在groupId =「postgresql」下面只有不推薦的東西不起作用......但「org.postgresql」包含最新的東西,現在一切正常。 謝謝。 –
不客氣,成功與Postgres和Scala :) – Ashalynd