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?
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?
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 = ?
???
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?
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.
luzeras,
Está um pouco difícil entender. Vejo duas possibilidades:
Você tem um dos dados e quer retornar TODOS
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);
usando OR’s eu ja tentei e nao adiantou
vou tentar a sua 2 opcao
jaja posto o resultado
obrigado
ta retornanado a mensagem na pesquisa do sql
String index out of range: -3
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);
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…
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;
}
Bacana, fico feliz…
Eu só não deixaria aquele
where = " 1";
Porque é uma bela gambi, certo
?
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…
hehe poise
vou arruma isto
obrigado