Я пытаюсь получить значение Blob через PL / SQL, Spring и JDBC.
Вот мой 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 равен нулю.
Исключение в потоке "main" java.lang.NullPointerException
в org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData (RowMapperResultSetExtractor.java:91)
в org.springframework.jdbc.core.JdbcTemplate.processResultSet (JdbcTemplate.java:1120)
в org.springframework.jdbc.core.JdbcTemplate.extractOutputParameters (JdbcTemplate.java:1089)
в org.springframework.jdbc.core.JdbcTemplate $ 5.doInCallableStatement (JdbcTemplate.java:996)
в org.springframework.jdbc.core.JdbcTemplate.execute (JdbcTemplate.java:935)
в org.springframework.jdbc.core.JdbcTemplate.call (JdbcTemplate.java:984)
в org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal (AbstractJdbcCall.java:364)
в org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute (AbstractJdbcCall.java:349)
в org.springframework.jdbc.core.simple.SimpleJdbcCall.executeFunction (SimpleJdbcCall.java:137)
Я прошел этот вопрос, который должен работать для меня. Но я думаю, что способ использования OracleLobHandler неправильный.
Кто-нибудь может пролить свет на то, где я иду не так?