Java Spring JDBC Oracle存储过程返回null

时间:2011-02-14 18:24:05

标签: java oracle spring jdbc

  

可能重复:
  Spring's Stored Procedure - results coming back from procedure always empty.

我有以下代码,虽然我知道调用应该导致内容我总是得到一个空的结果集可以有人建议为什么吗?

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());

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;
  }
}

2 个答案:

答案 0 :(得分:2)

乍一看它看起来不错。您是否尝试在sqlDeveloper中使用相同参数对同一数据库运行存储过程以确保它实际返回结果?

答案 1 :(得分:1)

我认为你的问题是由一年前的另一个类似问题回答的:Spring's Stored Procedure - results coming back from procedure always empty