2011-02-14 46 views
2

可能重复:
Spring's Stored Procedure - results coming back from procedure always empty.Java的春天JDBC Oracle存储过程返回null

我有下面的代码,虽然我知道这个电话应该导致内容我总是回一个空resultset任何人都可以建议为什么?

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

代码的小格式将真正帮助可读性。有很多白色空间可以滚动浏览。 – 2011-02-14 18:47:57

+0

存储过程是什么样的?无论如何,它的标题。 – skaffman 2011-02-14 19:09:23

+0

对于代码格式的道歉 - 急于离开办公室并想发布问题 - 现在编辑 – 2011-02-14 21:01:51

回答

2

乍一看它看起来确定。你有没有尝试在sqlDeveloper中运行存储的过程,使用相同的参数对同一个数据库进行确认,以确保它实际返回结果?