2011-02-14 77 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中運行存儲的過程,使用相同的參數對同一個數據庫進行確認,以確保它實際返回結果?