JavaSpringJDBCOracle存储过程返回null
可能重复:JavaSpringJDBCOracle存储过程返回null,java,oracle,spring,jdbc,Java,Oracle,Spring,Jdbc,可能重复: 我有下面的代码,虽然我知道调用应该会产生内容,但我总是返回一个空的结果集,有人能告诉我为什么吗 ParameterizedRowMapper<ExamPaper> mapper = new ParameterizedRowMapper<ExamPaper>() { public ExamPaper mapRow(ResultSet rs, int rowNum) throws SQLException { logger.info("in t
我有下面的代码,虽然我知道调用应该会产生内容,但我总是返回一个空的结果集,有人能告诉我为什么吗
ParameterizedRowMapper<ExamPaper> mapper = new ParameterizedRowMapper<ExamPaper>() {
public ExamPaper mapRow(ResultSet rs, int rowNum) throws SQLException {
logger.info("in the row mapper with"+rs.toString());
logger.info("in the row mapper with x no of rows " +rowNum);
ExamPaper examPaper = new ExamPaper();
examPaper.setCampus(rs.getString("campus"));
examPaper.setTitle(rs.getString("title"));
examPaper.setPaper(rs.getString("paper"));
examPaper.setCode(rs.getString("code"));
examPaper.year.add(rs.getString("year"));
examPaper.semester.add(rs.getString("semester"));
return examPaper;
}
};
Map params = new HashMap();
params.put("ic_search_string","fluid");
params.put("ic_location_flag", "unmc");
logger.info("calling stored procedure");
OracleStoredProcedure storedProcedure = new OracleStoredProcedure(getDataSource(),"pkg_exam_papers.p_get_exam_papers",logger, mapper);
Map results = storedProcedure.execute(params);
logger.info(results.size());
乍一看还可以。您是否尝试过在同一数据库中使用相同的参数运行sqlDeveloper中的存储过程,以确保它实际返回结果?我认为您的问题得到了一年前另一个类似问题的回答:对代码进行一点格式化确实有助于提高可读性。有很多空白可以滚动。存储过程是什么样子的?不管怎样,它的标题。为代码格式化道歉-匆忙离开办公室并想发布问题-立即编辑将在我可以的时候发布存储的过程标题。是的,它以sqldeveloper等效格式返回结果(我使用db visualiser)另一篇文章将rowmapper作为一个内部类提供,这似乎是答案,感谢gigatron
public class OracleStoredProcedure extends StoredProcedure
{
private Log logger;
public OracleStoredProcedure(DataSource dataSource,String storedProcedureName, Log logger,ParameterizedRowMapper mapper)
{
super();
this.logger = logger;
setDataSource(dataSource);
setFunction(false);
setSql(storedProcedureName)
declareParameter(new SqlParameter("ic_search_string", OracleTypes.VARCHAR));
declareParameter(new SqlParameter("ic_location_flag", OracleTypes.VARCHAR));
declareParameter(new SqlOutParameter("orc_results", OracleTypes.CURSOR, mapper));
declareParameter(new SqlOutParameter("on_errcode", OracleTypes.INTEGER));
declareParameter(new SqlOutParameter("oc_errmess", OracleTypes.CHAR));
compile();
}
public Map execute(Map parameters)
{
Map out = new HashMap();
try
{
out = super.execute(parameters);
}
catch (NullPointerException nullPointerException)
{
logger.error("Exception when executing stored procedure: " + nullPointerException.getMessage());
}
catch(Exception exception)
{
logger.error("Exception when executing stored procedure: " + exception.getMessage());
}
return out;
}
}