Problema ao elaborar um select com pesquisando 4 campos

11 respostas
luuu

olá

estou formulando uma pesquisa
e no formulario tem 4 campos

codigo , nome , cpf , rg

e nao estou conseguindo formular um select para obter dados q tenham ou o nome , ou o codigo , ou o cpf ou o rg enviado

alguem pode me ajudar?

11 Respostas

tmoretto

Poxa, não entendi muito o que você quer dizer, mas eu acho que seja no grosso isso:

select * from tabela where codigo = ? or nome = ? or cpf = ? ou rg = ?

???

luuu

assim ,
tenho um formulario de pesquisa com os campos
Codigo
Nome
Cpf
Rg

entao por exemplo eu digito rg = 12345-6

ai ele usa um select q pesquise esse rg
mas nesse select ele tambem recebeu os seguintes parametros dos outros valores
Codigo = “”
Nome = “”
Rg = “”

e gostaria q ele retornasse esse dado com o rg 12345-6

entendeu?

B

Tem vários modos:
Pode usar o OR na restrição Where.
Ou montar a String de seu Select conforme os dados da Pesquisa.
Ou usar um SQL dinamico se tiver em uma Procedure.

fcoury

luzeras,

Está um pouco difícil entender. Vejo duas possibilidades:

  1. Você tem um dos dados e quer retornar TODOS

  2. Você tem um problema com os dados em branco

No caso 1) você tem que fazer

SELECT codigo, nome, cpf, rg FROM cliente
WHERE codigo = ? OR nome = ? OR cpf = ? OR rg = ?

Se for o caso 2) você tem que fazer um SQL condicional, algo do tipo

String codigo = ...; // como você pega o código do request
String nome = ...; // como você pega o código do request
String cpf = ...; // como você pega o código do request
String rg = ...; // como você pega o código do request

String sql =
	"SELECT codigo, nome, cpf, rg FROM cliente WHERE ";

String where = "";

if (codigo != null && codigo.trim().length() > 0) {
	where += "cliente = '" + codigo + "' OR ";
}

if (nome != null && cpf.trim().length() > 0) {
	where += "cpf = '" + cpf + "' OR ";
}

if (cpf != null && cpf.trim().length() > 0) {
	where += "cpf = '" + cpf + "' OR ";
}

if (rg != null && rg.trim().length() > 0) {
	where += "rg = '" + rg + "' OR ";
}

if (where.length() < 1) {
	// erro: o usuário não especificou nenhum campo para pesquisa
	throw Exception(...);
}

// tira o último "OR"
where = where.substring(0, where.length() - 3);

// monta o SELECT
sql += where;

// e agora execute seu sql
ResultSet rs = statement.executeQuery(sql);
luuu

usando OR’s eu ja tentei e nao adiantou
vou tentar a sua 2 opcao

jaja posto o resultado

obrigado

luuu

ta retornanado a mensagem na pesquisa do sql

String index out of range: -3

fcoury

luzeras,

Manda a exceção inteira… Provavelmente o where não está sendo preenchido, faz a algumas alteração no código (veja *** (1) até *** (4) no fonte abaixo). Depois de executar, mande o output que ele gera, por favor (além da exceção inteira).

String codigo = ...; // como você pega o código do request
String nome = ...; // como você pega o código do request
String cpf = ...; // como você pega o código do request
String rg = ...; // como você pega o código do request

// *** (1) Adiciona isso:
System.out.println("Codigo: " + codigo);
System.out.println("Nome: " + nome);
System.out.println("CPF: " + cpf);
System.out.println("RG: " + rg);

String sql =
	"SELECT codigo, nome, cpf, rg FROM cliente WHERE ";

String where = "";

if (codigo != null && codigo.trim().length() > 0) {
	where += "cliente = '" + codigo + "' OR ";
}

if (nome != null && cpf.trim().length() > 0) {
	where += "cpf = '" + cpf + "' OR ";
}

if (cpf != null && cpf.trim().length() > 0) {
	where += "cpf = '" + cpf + "' OR ";
}

if (rg != null && rg.trim().length() > 0) {
	where += "rg = '" + rg + "' OR ";
}

// *** (2) Adiciona isso:
System.out.println("Where ficou: " + where);

if (where.length() < 1) {
	// erro: o usuário não especificou nenhum campo para pesquisa
	throw Exception(...);
}

// tira o último "OR"
where = where.substring(0, where.length() - 3);

// *** (3) Adiciona isso:
System.out.println("Where depois de remover: " + where);

// monta o SELECT
sql += where;

// *** (4) Adiciona isso:
System.out.println("SQL: " + sql);

// e agora execute seu sql
ResultSet rs = statement.executeQuery(sql);
fcoury

Desculpa, tem um erro no código, veja:

if (nome != null && cpf.trim().length() > 0) {
 	where += "cpf = '" + cpf + "' OR ";
 }

Deveria ser:

if (nome != null && nome.trim().length() > 0) {
 	where += "nome = '" + nome + "' OR ";
 }

E também:

if (codigo != null && codigo.trim().length() > 0) {
 	where += "cliente = '" + codigo + "' OR ";
 }

deveria ser:

if (codigo != null && codigo.trim().length() > 0) {
 	where += "codigo = '" + codigo + "' OR ";
 }

MALDITO COPY & PASTE :?

Veja se isso funciona…

luuu

opa
consegui resolver

mudei algumas coisas e funcionou

ficou desse jeito

public Vector pesquisaPacientes(String codigo,String nome,String cpf,String rg){
         Vector v = new Vector();
         try{
            Statement st = conn.createStatement();
            String sql = "SELECT codigo_paciente, nome_paciente, cpf, rg FROM paciente WHERE ";
            
            String where = "";
 
            if (!codigo.equals("")) {
                where += "codigo_paciente = '" + codigo + "' OR ";
            }
 
            if (!nome.equals("")) {
                where += "nome_paciente = '" + nome + "' OR ";
            }
 
            if (!cpf.equals("")) {
                where += "cpf = '" + cpf + "' OR ";
            }
 
            if (!rg.equals("")) {
                where += "rg = '" + rg + "' OR ";
            }
            
            if(!where.equals(""))
                where = where.substring(0, where.length() - 3);
            
            if(nome.equals("") && codigo.equals("") && cpf.equals("") && rg.equals("")){
                where += " 1";
            }
            
            
 
            
            sql += where;
            // e agora execute seu sql
            ResultSet rs = st.executeQuery(sql);
            //r = "sem erros";
            while(rs.next()){
                PacienteFormulario pc = new PacienteFormulario();
                
                pc.setCodPaciente(rs.getString(1));
                pc.setNomePaciente(rs.getString(2));
                pc.setCpf(rs.getString(3));
                pc.setRg(rs.getString(4));
                
                v.add(pc);
            }
         }
         
             
             

         catch(Exception e){
             //r = e.getMessage();
             e.printStackTrace();
         }
         return v;

     }
fcoury

Bacana, fico feliz…

Eu só não deixaria aquele

where = " 1";

Porque é uma bela gambi, certo :smiley: ?

Dá prá contornar melhor com:

public Vector pesquisaPacientes(String codigo,String nome,String cpf,String rg){
          Vector v = new Vector();
          try{
             Statement st = conn.createStatement();
             // tira o WHERE daqui... 
             String sql = "SELECT codigo_paciente, nome_paciente, cpf, rg FROM paciente";
             
             // e coloca aqui...
             String where = " WHERE ";
  
             if (!codigo.equals("")) {
                 where += "codigo_paciente = '" + codigo + "' OR ";
             }
  
             if (!nome.equals("")) {
                 where += "nome_paciente = '" + nome + "' OR ";
             }
  
             if (!cpf.equals("")) {
                 where += "cpf = '" + cpf + "' OR ";
             }
  
             if (!rg.equals("")) {
                 where += "rg = '" + rg + "' OR ";
             }
             
             // muda aqui...
             if(!where.equals(" WHERE "))
                 sql += where;
             
             // e arranca isso:
             /*
             if(nome.equals("") && codigo.equals("") && cpf.equals("") && rg.equals("")){
                 where += " 1";
             }

             sql += where;
             */
             
             // e agora execute seu sql
             ResultSet rs = st.executeQuery(sql);
             //r = "sem erros";
             while(rs.next()){
                 PacienteFormulario pc = new PacienteFormulario();
                 
                 pc.setCodPaciente(rs.getString(1));
                 pc.setNomePaciente(rs.getString(2));
                 pc.setCpf(rs.getString(3));
                 pc.setRg(rs.getString(4));
                 
                 v.add(pc);
             }
          }
          
              
              
 
          catch(Exception e){
              //r = e.getMessage();
              e.printStackTrace();
          }
          return v;
 
      }

Valeu…

luuu

hehe poise
vou arruma isto

obrigado

Criado 17 de outubro de 2006
Ultima resposta 18 de out. de 2006
Respostas 11
Participantes 4