2008-12-18 144 views
3

我正在從ResultSet中讀取文件,並且需要將文件保存到Oracle數據庫中。爲什麼我不能從本機java中構建oracle BLOB Blob

... 
ResultSet rs = ... 
java.sql.Blob myfile = rs.getBlob("field") 
java.io.OutputStream os = ((oracle.sql.BLOB) myfile).getBinaryOutputStream(); 

我收到此錯誤消息

java.lang.ClassCastException 

任何一個有解決這個?謝謝!

回答

3

我找到了解決方案。我想與有這個問題的人分享。

的代碼從Oracle的blob得到的OutputStream是:

java.io.OutputStream os = ((oracle.sql.BLOB) myBlob).setBinaryStream(1L); 

的setBinaryStream()實際上返回java.io.OutputStream對象

+0

@ericbn請不要以改變其含義/意圖的方式編輯問題。相反,請添加評論,指出您認爲應該更改的方式。 – admdrew 2014-09-10 17:45:16

3

java.sql.Blobis an interface。推測在您的ResultSet中返回的實現與oracle.sql.BLOB的實現不同?

myfile.getClass()返回什麼?

+0

我想你是對的。這兩個Blog不兼容。我現在使用weblogic.jdbc.common.OracleBlob,它工作正常。儘管它已被棄用。但是會保留它,直到我們升級到Java 5或更高版本。 – netic 2008-12-19 02:14:03

3

你似乎沒有oracle.sql.BLOB那裏(如果你有,它應該工作,BLOB實現Blob)。 ClassCastException說它是什麼?

什麼版本的Oracle和您使用的是什麼版本的JDBC驅動程序?

getBinaryOutputStream無論如何過時,你應該在JDBC(3.0)接口,這可能就不再需要去Oracle的內部類在所有使用的setBinaryStream

+0

您對於使用JDBC 3.0中定義的「setBinaryStream」有很好的建議。 不幸的是我的應用程序仍然使用1.4。再次等待,直到我們升級:) – netic 2008-12-19 02:15:22