ResultSet retornando nulo - RESOLVIDO-

Fala galera estou tento problemas em uma querry onde o resultSet aparentemente esta retornando nulo, porem copiei exatamente a query do console e fiz o select no banco e tenho resultados .
Alguem saberia qual o problema segue a funcao
o Objeto esta sempre retornando nulo

public ErosionFactorVO getErosionFactorVO(Integer idContract, Long idPortfolio, Integer dtBase, Integer idInstrument, Integer dtPosi, Connection conn) throws SQLException
{
ErosionFactorVO erosionFactorVo = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try

{
    String sql = "WITH tb_prev_event AS (" +
	    " SELECT tb_dist_certificate_quote_erosion_factor.id_contract,"+
	    " tb_dist_certificate_quote_erosion_factor.id_portfolio," +
	    " tb_dist_certificate_quote_erosion_factor.id_instrument,"+
	    " tb_dist_certificate_quote_erosion_factor.dt_base,"+
	    " tb_dist_certificate_quote_erosion_factor.dt_event,"+
	    " tb_dist_certificate_quote_erosion_factor.id_factor_type,"+
	    " tb_dist_certificate_quote_erosion_factor.qtd_quotes_reference,"+
	    " tb_dist_certificate_quote_erosion_factor.qtd_quotes_erosion,"+
	    " tb_dist_certificate_quote_erosion_factor.vl_rentability,"+
	    " tb_dist_certificate_quote_erosion_factor.is_factor_executed,"+
	    " tb_dist_certificate_quote_erosion_factor.dt_reference AS dt_prev_event,"+
	    " COALESCE(tb_as_portfolio_market_price.vl_price, tb_as_portfolio_market_price.vl_price_valemobi) AS vl_price_prev_event,"+
	    " tb_dist_certificate_quote_erosion_factor.vl_iof_factor_basis"+
	    " FROM tb_as_portfolio_market_price"+
	    " INNER JOIN tb_dist_certificate_quote_erosion_factor"+
	       " ON (tb_dist_certificate_quote_erosion_factor.id_contract = tb_as_portfolio_market_price.id_contract"+
	       " AND tb_dist_certificate_quote_erosion_factor.id_portfolio = tb_as_portfolio_market_price.id_portfolio"+
	      "  AND tb_dist_certificate_quote_erosion_factor.id_instrument = tb_as_portfolio_market_price.id_instrument"+
	      "  AND tb_dist_certificate_quote_erosion_factor.dt_reference = tb_as_portfolio_market_price.dt_trade"+
	      "  AND tb_dist_certificate_quote_erosion_factor.dt_reference = (SELECT MAX(dt_reference) FROM tb_dist_certificate_quote_erosion_factor AS tb_prev_fact"+
	         "   WHERE"+
	             "   tb_prev_fact.id_contract = tb_dist_certificate_quote_erosion_factor.id_contract"+
	             "   AND tb_prev_fact.id_portfolio = tb_dist_certificate_quote_erosion_factor.id_portfolio"+
	             "   AND tb_prev_fact.id_instrument = tb_dist_certificate_quote_erosion_factor.id_instrument"+
	             "   AND tb_prev_fact.dt_base = tb_dist_certificate_quote_erosion_factor.dt_base"+
	       " AND dt_reference <= ?))"+
	   " WHERE tb_dist_certificate_quote_erosion_factor.id_contract = ?"+
	   " AND tb_dist_certificate_quote_erosion_factor.id_portfolio = ?"+
	   " AND tb_dist_certificate_quote_erosion_factor.id_instrument = ?"+
	   " AND tb_dist_certificate_quote_erosion_factor.dt_base = ?"+
	   " AND tb_dist_certificate_quote_erosion_factor.vl_ir_factor > 0"+
	   " AND tb_dist_certificate_quote_erosion_factor.is_factor_executed)"+

	    " SELECT tb_as_trade_custody_posi_day.id_contract, "+
	    " tb_as_trade_custody_posi_day.id_instrument,"+
	    " tb_as_trade_custody_posi_day.id_portfolio, "+
	   " tb_as_trade_custody_posi_day.id_custodian,"+
	    " tb_as_trade_custody_posi_day.id_operation, "+
	    " tb_prev_event.dt_event,"+
	   " tb_as_trade_custody_posi_day.vl_price, "+
	   " tb_prev_event.id_factor_type,"+
	   " tb_prev_event.qtd_quotes_reference, "+
	   " tb_prev_event.qtd_quotes_erosion, "+
	   " tb_as_trade_custody_posi_day.dt_posi, "+
	   " tb_as_trade_custody_posi_day.realized,"+
	   " tb_prev_event.vl_rentability,"+
	   " tb_prev_event.is_factor_executed,"+
	   " COALESCE(tb_as_trade_custody_posi_day.dt_base, dt_prev_event) AS dt_prev_event,"+
	   " COALESCE(vl_price_prev_event, tb_as_trade_custody_posi_day.vl_price) AS vl_price_prev_event,"+
	   " COALESCE(tb_prev_event.vl_iof_factor_basis,0) AS vl_iof_factor_basis"+
	   " FROM tb_as_trade_custody_posi_day"+
	   " LEFT JOIN tb_prev_event"+
	    "    ON (tb_prev_event.id_contract = tb_as_trade_custody_posi_day.id_contract"+
	    "    AND tb_prev_event.id_portfolio = tb_as_trade_custody_posi_day.id_portfolio"+
	    "    AND tb_prev_event.id_instrument = tb_as_trade_custody_posi_day.id_instrument"+
	    "    AND tb_prev_event.dt_base = tb_as_trade_custody_posi_day.dt_base)"+
	   " WHERE"+
	   "     tb_as_trade_custody_posi_day.id_contract = ?"+
	   "     AND tb_as_trade_custody_posi_day.id_portfolio = ?"+
	   "     AND tb_as_trade_custody_posi_day.id_instrument = ?"+
	   "     AND tb_as_trade_custody_posi_day.dt_base = ?"+
	   "     AND tb_as_trade_custody_posi_day.dt_posi = ?";

   stmt = conn.prepareStatement(sql);
	

   

   int i = 1 ;
    stmt.setInt(i++, dtPosi);
    stmt.setInt(i++, idContract);
    stmt.setLong(i++, idPortfolio);
    stmt.setLong(i++, idInstrument);
    stmt.setLong(i++, dtBase);
    stmt.setLong(i++, idContract);
    stmt.setLong(i++, idPortfolio);
    stmt.setLong(i++, idInstrument);
    stmt.setLong(i++, dtBase);
    stmt.setInt(i, dtPosi);
    
    log.debug("querryprev {}", stmt);
    
log.debug("getErosionFactorVO = " + stmt);

    rs = stmt.executeQuery();


   

   

    if (rs.next())
    {
	
	erosionFactorVo = new ErosionFactorVO();
	erosionFactorVo.setIdContrat(rs.getInt("id_contract"));
	erosionFactorVo.setIdInstrument(rs.getInt("id_instrument"));
	erosionFactorVo.setIdPortifolio(rs.getInt("id_portfolio"));
	erosionFactorVo.setIdCustodian(rs.getInt("id_custodian"));
	erosionFactorVo.setDtReference(rs.getInt("id_operation"));
	erosionFactorVo.setDtBase(rs.getInt("dt_event"));
	erosionFactorVo.setVlPrice(rs.getBigDecimal("vl_price"));
	erosionFactorVo.setDtBase(rs.getInt("id_factor_type"));
	erosionFactorVo.setQtdQuotesReference(rs.getBigDecimal("qtd_quotes_reference"));
	erosionFactorVo.setQtdQuotesErosion(rs.getBigDecimal("qtd_quotes_erosion"));
	erosionFactorVo.setDtPosi(rs.getInt("dt_posi"));
	erosionFactorVo.setIsFactorExecuted(rs.getBoolean("realized"));
	erosionFactorVo.setVlRentability(rs.getBigDecimal("vl_rentability"));
	erosionFactorVo.setIsFactorExecuted(rs.getBoolean("is_factor_executed"));
	erosionFactorVo.setDtBase(rs.getInt("dt_base"));
	erosionFactorVo.setIdFactorType(rs.getInt("id_factor_type"));
	erosionFactorVo.setVlIofFactor(rs.getBigDecimal("vl_iof_factor"));
	erosionFactorVo.setVlIrFactor(rs.getBigDecimal("vl_ir_factor"));
	erosionFactorVo.setDtPrevEvent(rs.getInt("dt_prev_event"));
	erosionFactorVo.setVlPricePrevEvent(rs.getBigDecimal("vl_price_prev_event"));
	erosionFactorVo.setIofBasisFactor(rs.getBigDecimal("vl_iof_factor_basis"));
	
    }
 
   
} finally

{
    closePreparedStatement(stmt);
	   closeResultSet(rs);
}
return erosionFactorVo;
}

Vamos dizer que por “superstição” eu no seu lugar trocaria esse i++ nos setXXX do stmt pelos índices numéricos (1,2,3…). Verificaria também se todas as variáveis que estão passando valores para estas chamadas setXXX possuem valores válidos.

Já tentei setando os valores , e todos valores passados são validos …

Reparei uma coisa agora… esses campos dt_reference, dt_base e dt_posi no banco por acaso são do tipo Date ou Timestamp ? Se sim, passar valores Int ou Long como está fazendo não vai dar certo, porque a conversão não será feita implicitamente.

O problema é nas regras de consulta do SQL que você está informando no java.
Faça um teste do tipo caixa branca no seu banco de dados:
1 - Insira dados manualmente no banco de dados;
2 - Execute a query que você postou diretamente no SGBD com valores conhecidos existentes no banco, é menos estressante do que forçar o acerto no java.
Se mesmo usando valores existentes no SGBD a query for null, o problema é na query.
Se retornar os dados pesquisados, provavelmente o problema é neste trecho:

        int i = 1;
        stmt.setInt(i++, dtPosi);//i = 1
        stmt.setInt(i++, idContract);//i = 2
        stmt.setLong(i++, idPortfolio);//i = 3
        stmt.setLong(i++, idInstrument);//i = 4
        stmt.setLong(i++, dtBase);//i = 5
        stmt.setLong(i++, idContract);//i = 6
        stmt.setLong(i++, idPortfolio);//i = 7
        stmt.setLong(i++, idInstrument);//i = 8
        stmt.setLong(i++, dtBase);//i = 9
        stmt.setInt(i, dtPosi);//i = 10
        //Estes incrementos estão de fato corretos? São compatíveis com informações do banco de dados?

Se este i for um id, pelo perceptível, a consulta se refere a entidades que NÃO se relacionam pelo mesmo id.
Resumo: se a query retorna null, teste diretamente no SGBD, com valores conhecidos.

Delgacolt, siga as considerações abaixo:

1 - Primeiramente monte a string da query:
String sql = “”;

2 - Prepara a string da query:
PreparedStatement ps = conn.prepareStatement(sql);

3 - Adicione os parâmetros na query:
int i = 0;
ps.setInt(++i, dtPosi);
ps.setInt(++i, idContract);

4 - Execute a query e atribua os resultados da mesma no objeto “ResultSet”:
ResultSet rs = ps.executeQuery();

5 - Faça um loop finito para atribuir os valores de resultado da query em seu objeto, caso for retornar mais de um valor.
Obs: Notei que no código que vc colocou vc usou o “if”, nesse caso irá verificar somente se retornou algum valor da query e conseguirá apenas resgatar apenas o último valor da mesma.

while(rs.next()){
erosionFactorVo = new ErosionFactorVO();
erosionFactorVo.setIdContrat(rs.getInt(“id_contract”));
}

A query e a função estavam corretos , o problema era que no processo era deletado uma das databelas onde a consulta era feita