Pegar apenas um valor de uma lista duplicada

3 respostas
C

Pessoal, tenho uma dúvida boba que não consegui resolver:

tenho o metodo abaixo que uso para listar algumas informações:

public List<campanha> listarTodasCampanhas(String modelo, String item,String concessao,String mes) {
       try {
            conn = (Connection) ConnectionFactory.getConnection();
          
            String sql = "Select * from listaCampanha where concessao like ? and modelo like ? and item like ?";

            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1, "%"+concessao+"%");
            stmt.setString(2, "%"+modelo+"%");
            stmt.setString(3, "%"+item+"%");
           // stmt.setString(4, "%"+mes+"%");

            ResultSet rs = stmt.executeQuery();
            List<campanha> lista = new ArrayList();

            while (rs.next()) {
                campanha c = new campanha();
                c.setId(rs.getInt(1));
                c.setConcessao(rs.getString(2));
                c.setModelo(rs.getString(3));
                c.setItem(rs.getString(4));
                c.setCodigo(rs.getString(5));
                c.setPreco(rs.getString(6));
                c.setMo(rs.getString(7));
                c.setMes(rs.getString(8));
                c.setValidade(rs.getString(9));
                lista.add(c);
            }
            rs.close();
            return lista;
        } catch (Exception ex) {
            Logger.getLogger(campanhaDaoMysql.class.getName()).log(Level.SEVERE, null, ex);
        }

Quando vou exibir esses dados no jsp, não mostro o mês nem a validade na tabela, porém preciso que a validade seja impressa na tela apenas uma vez, pois ela vem duplicada do banco:
consigo pegar apenas um valor pelo getValidade??

<table class="ui-widget ui-widget-content">
	<tr  bgcolor="#003366" style="color:#FFFFFF" >
                <td width="150px">Concessionário</td>
		<td width="150px">Model</td>
		<td width="500px">Item</td>
                <td width="300px">Código</td>
                <td width="100px">Preço</td>
                 <td width="100px">M.O</td>

	</tr>

    <%
    List<campanha> lista = (List<campanha>)request.getAttribute("listaCampanhas");

      if(lista!=null)
          for(campanha c: lista){

      %>

      <tr bgcolor="#E8E8E8">
          
                <td width="150px"><%=c.getConcessao()%></td>
		<td width="150px"><%=c.getModelo()%></td>
                <td width="500px"><%=c.getItem()%></td>
                <td width="300px"><%=c.getCodigo()%></td>
                <td width="100px"><%= c.getPreco()%></td>
                <td width="100px"><%= c.getMo()%></td>

	</tr>
      <%
    }
    %>
    </table>

// IMPRIMI AQUI A VALIDADE DESSA CAMPANHA

3 Respostas

mauricioadl

coloca um distinct na sua select que ele tras a consulta sem duplicar. o que acha?

C

mauricio,
seguindo a sua idéia achei melhor fazer um metodo a parte, para não precisar mexer na estrutura, fiz o seguinte:
O metodo precisa receber o mês e o nome, pois assim a validade retornaria apenas um valor. [ me corrija se eu estiver errado por favor]

public campanha pesquisarValidade( String mes, String concessao) {
       try {
            conn = (Connection) ConnectionFactory.getConnection();
            //String sql = "select * from listaCampanha where modelo like"+"'%"+ modelo +"%' and item like"+"'%"+ item +"%'" ;
            String sql = "Select distinct validade from listacampanha where mes like ? and concessao like ?";

            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1, "%"+mes+"%");
            stmt.setString(2, "%"+concessao+"%");
          
            ResultSet rs = stmt.executeQuery();
            campanha c = new campanha();
            while (rs.next()) {

                c.setValidade(rs.getString(1));               
            }
            rs.close();
            return c;
        } catch (Exception ex) {
            Logger.getLogger(campanhaDaoMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;

    }

Estou fazer só um teste no meu servlet para saber se está retornando a validade correta:

.....
campanhaDaoMysql cDao = new campanhaDaoMysql();
System.out.println(cDao.pesquisarValidade("DEZEMBRO", "CIRASA"));

retorno:
bean.campanha@1735998

onde está o erro?

mauricioadl

ta faltando escrever o toString do objeto campanha, a e vc vai conseguir testar.

Criado 15 de dezembro de 2011
Ultima resposta 15 de dez. de 2011
Respostas 3
Participantes 2