Ajuda JavWeb

8 respostas
A

Bom Pessoal, estou com um problemão!!!
Tenho uma classe q possui um metodo de busca no bd, e eu estou tentando fazer no mesmo metodo pra q ele busque tbm pelo campo duracao e hora, mas por intervalo dos mesmos! o Metodo é esse:

public List pesquisarDT(String data1, String data2, String duracao, String duracao1, String duracao2,
                            String tipo, String importante,
                            String ouvida, String procurar, String hora, String pa){

        List resultado = null;
        String sql;
        
        
        sql="select * from ligacoes where (data_lig between  ? and ? ) ";
        
        if(!tipo.equals("todas")){
                sql+=" and tipo = ? ";
            }
            if(importante.equals("importante")){
                sql+=" and importante = true ";
            }
            if(ouvida.equals("ouvida")){
                sql+=" and ouvida = false ";
            }
            if (!pa.equals("")){
                sql+=" and pa_atendimento = ? ";
            }
            if(!procurar.equals("")){
                sql+=" and (contato like ? or observacao like ? or telefone like ? or hora like ?) ";
            }
        
            if(!hora.equals("")){
                sql+="and hora >= ? and hora <= ?";
            }
        
            if(!duracao.equals("")){
                sql+="and (duracao between ? and ?)";
            }
            

            if(tipo.equals("todas")){
                sql+="order by [data_lig] desc, [hora] desc";
            }
            else {
                sql+="order by [data_lig] desc, [hora] desc";
            }
        
        try {
            Connection con = Conexao.getConexaoODBC();
            PreparedStatement pstm = con.prepareStatement(sql);
            pstm.setString(1, data1 );
            pstm.setString(2, data2 );
            if(!tipo.equals("todas")){
             pstm.setString(3, tipo );
                   if (!procurar.equals("")) {
                       if(!pa.equals("")){
                           pstm.setString(4, pa);
                           if (!procurar.equals("")) {
                               pstm.setString(5, "%" + procurar + "%");
                               pstm.setString(6, "%" + procurar + "%");
                               pstm.setString(7, "%" + procurar + "%");
                               pstm.setString(8, "%" + procurar + "%");
                           }
                           if(!duracao.equals("")){
                               pstm.setString(9, duracao1);
                               pstm.setString(10,duracao2);
                           }
                           if(!hora.equals("")){
                               pstm.setString(11, "%" + hora + "%");
                           }
                       }else{
                           pstm.setString(4, "%" + procurar + "%");
                           pstm.setString(5, "%" + procurar + "%");
                           pstm.setString(6, "%" + procurar + "%");
                           pstm.setString(7, "%" + procurar + "%");
                       }
                   }else{
                       if(!pa.equals("")){
                           pstm.setString(4, pa);
                       }
                   }
            }

            if(tipo.equals("todas")){
                   if(!pa.equals("")){
                           pstm.setString(3, pa);
                           if (!procurar.equals("")) {
                               pstm.setString(4, "%"+procurar+"%");
                               pstm.setString(5, "%"+procurar+"%");
                               pstm.setString(6, "%"+procurar+"%");
                               pstm.setString(7, "%"+procurar+"%");                              
                           }
                    }else {
                        if (!procurar.equals("")){
                            pstm.setString(3, "%" + procurar + "%");
                            pstm.setString(4, "%" + procurar + "%");
                            pstm.setString(5, "%" + procurar + "%");
                            pstm.setString(6, "%" + procurar + "%");
                        }
                   }
            }
            

            ResultSet rs = pstm.executeQuery();

            if(rs.next()){
                resultado = new ArrayList();

                    do {
                        PesquisaVO pesquisa = preencherpesquisa(rs);
                        resultado.add(pesquisa);
                    } while (rs.next());

            }
            rs.close();
            pstm.close();
            con.close();

            return resultado;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

E a referencia no jsp é dessa forma:

<td width="10%"><span class="style2">
                                    <input name="duracao1" id="duracao1" type="text" size="2" />
                                    </span></td>
<td width="10%"><span class="style2">
				    <input name="duracao2" id="duracao2" type="text" size="2" />
                                    </span></td>
<td width="30%"><span class="style2">
                                      <input name="hora" type="text" id="hora" size="6" value="00:00:00"/>
                                    </span></td>
									<td width="5%"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">e</font></td>
                                    <td width="30%" valign="bottom"><span class="style2">
                                      <input name="hora" type="text" id="hora" size="6" value="23:59:59"/>

O Problema é q qd eu busco pelo intervalo q duracao ele vem null e qd busco por intervalo d hora ele não traz nada!
O q estou fazendo de errado? Alguém poderia me ajudar nesse problema!!
Desde já agradeço

8 Respostas

italo.vendrameto

Salve,

Cara dei uma olhada por cima do seu cõdigo da uma olhada no jsp, os inputs para hora estão com mesmo nome, então ele deve estar recebendo só um valor dai não funfa mesmo,

no outro caso da duração para usar between como tipo time ou date ve vai ter que converter para esse tipo senão não funfa tb

flw

rafaelglauber

Os campos de data são datas no banco de dados? Se sim utilize os tipos apropriados no sets dos parâmetros.

A

os Campos estão todos como String!!!

rafaelglauber

Terá que criar seus campos de data com tipos de data se não a consulta com between não irá funcionar como deseja.

A

Rafael, o campo Duracao e Hora são os q preciso fazer a busca, eles estão como String
A data esta funcionando!

rafaelglauber

Para o between funcionar com o campo de duração do jeito que você quer deverá então usar algum tipo numerico e estabelecer que cada unidade representa 1 minuto ou 1 segundo ou qualquer outra medida, o between entre valores de texto não funciona para a verificação que quer fazer. Para usar as horas como string deverá testar antes no seu banco de dados, a exemplo do oracle, você pode fazer between entre campos de texto que armazenam horas (no formato hh:mi:ss), mas em outros bancos de dados não sei como funciona esse operador.

A

Rafael, estou usando o bd Acess e no bd direto fiz o sql e funcionou tbm, os campos de horas estao da forma como vc falou, com campos d texto q armazenando hora nesse formato hh:mi:ss ! Agora para o campo de duração tenho q tratar no jsp como Inteiro?

rafaelglauber

Adriano,

como vc armazena o campo DURACAO??? você ira trata-lo como vc estiver salvando no db, pode informar o formato dele?

Criado 26 de dezembro de 2007
Ultima resposta 26 de dez. de 2007
Respostas 8
Participantes 3