【发布时间】:2011-07-25 14:42:27
【问题描述】:
我正在尝试通过 PL/SQL、Spring 和 JDBC 检索 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 );
我得到以下异常.. 基本上说结果集为空。
线程“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)
我经历了this 应该对我有用的问题。但是我觉得我使用OracleLobHandler的方式不对。
谁能解释我哪里出错了?
【问题讨论】:
标签: java spring jdbc plsql blob