我想通過PL/SQL,Spring和JDBC檢索Blob值。從PL/SQL通過Spring讀取Blob
這裏是我的PL/SQL
function GETBLOB(pjobid in number)
RETURN bobrecCur
is
vbobrecCur bobrecCur;
begin
OPEN vbobrecCur FOR
SELECT jobid, filecontent
FROM TESTBULKJOBDATAFILE
WHERE jobid = pjobid;
RETURN vbobrecCur;
end GETBLOB
我的Java代碼是
this.getDataJdbcCall =
new SimpleJdbcCall(this.jdbcTemplate)
.withFunctionName( SQL_READ_DATA)
.withoutProcedureColumnMetaDataAccess()
.declareParameters(
new SqlOutParameter("abc", OracleTypes.CURSOR),
new SqlParameter("pjobid", OracleTypes.INTEGER)
);
Map input = new HashMap();
input.put("pjobid", 99999);
ResultSet result = this.getDataJdbcCall.executeFunction(ResultSet.class , input);
DefaultLobHandler lob = new DefaultLobHandler();
InputStream is = lob.getBlobAsBinaryStream(result, 1);
我收到以下異常..基本上說ResultSet是空。
在org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:91) 在org.springframework.jdbc.core.JdbcTemplate.processResultSet(在JdbcTemplate的線程 「主」 顯示java.lang.NullPointerException 異常的.java:1120) 在org.springframework.jdbc.core.JdbcTemplate.extractOutputParameters(JdbcTemplate.java:1089) 在org.springframework.jdbc.core.JdbcTemplate $ 5.doInCallableStatement(JdbcTemplate.java:996) 的組織。 springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:935) at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:984) at org.springframework.jdbc.core.simple.AbstractJdbcCa在org.springframework.jdbc.core.simple.SimpleJdbcCall.executeFunction(SimpleJdbcCall。org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:349) 處使用ll.executeCallInternal(AbstractJdbcCall.java:364) 。 java:137)
我經歷了this問題應該爲我工作。但我認爲我使用OracleLobHandler的方式不對。
任何人都可以告訴我哪裏出錯了嗎?
這個解決方案可能適用於有限的(在這種情況下,32KB)或小大小的數據。但是,如果大小不可預知或大,你應該去流(我以前的答案) – javadeveloper 2013-09-23 01:14:34