Pesquisa em Java

Olá Pessoal.

Estou fazendo um trbalho da Faculdade e o assunto e de controle de movimentações bancárias…

mas estou com um probleminha no quesito da Pesquisa…

estou indo pesquisar em um banco de dados MySQL. quando a isso não tem problema…

vou mostrar um EXEMPLO para vcs… quero pesquisar as pessoas com o nome de PEDRO…

tenho esses nomes em meu DB : Pedro Luis, Pedro Amario, Carlos Pedro… etc…

e quandos eu colocar para pesquisar pelo nome Pedro eu quero q retorne esses nomes ai em cima… estou colocando os nomes para aparecer em uma tabela…

não adianta cololocar para comprar usando o método equals() pois ele só retorna os nomes totalmente identicos…

como vcs poderam ver o meu problema é em pesquisar apenas uma parte do nome da pessoa… heheh

já tentou fazer um like %pedro% no codigo SQL?

Exemplos de utilização do like em sql:

Busca todos os registros onde o campo nome termina com PEDRO

Query:
select * from tabela where nome like ‘%PEDRO’

Exemplo de registros selecionados:
JOAO PEDRO

Busca todos os registros onde o campo nome começa com PEDRO

Query:
select * from tabela where nome like ‘PEDRO%’

Exemplo de registros selecionados:
PEDRO JOAO

Busca todos os registros onde o campo nome tenha uma ocorrencia PEDRO:

Exemplo de registros selecionados:
PEDRO JOAO
JOAO PEDRO
PAULO PEDRO JOAO

Query:
select * from tabela where nome like ‘%PEDRO%’

Abraço!

pois é… eu estou pegando os valores do banco de dados e jogando em uma variavel e estou fazendo a comparação dentro do meu programa em java…

eu queria por exemplo assim

[code]String nomeB=“Pedro”;
String nomeA=“Luis Pedro”;

if(nomeB.equals(nomeA){
SYstem.out.println(“Pessoas com o nome Pedro encontrado”);

}[/code]

eu queria algo do genero acima… só que com a função equals não vai funcionar… entendeu?

Isso mesmo que eu ia falar…

So que nesse caso no lugar de pedro iria ficar a variavel ne…

Tem varios outros meios de achar um nome usando like… tem outro comando tambem que no momento me esqueci, nao sei se é REGEXP, acho que é esse… rsrs

No site do apostilando tem uma otima apostila de MySQL, de uma procurada la :slight_smile:

Abraços

Então vc pode usar um metodo para analisar se a string A está contida na string B… Mas eu não lembro o nome do metodo… dá uma olhadinha no google um metodo em java para pesquisar substrings…

=)

Por que cargas dágua não bota o critério na consulta?!

malsan tem razão, seria melhor em vez de vc trazer todos os registros do banco fazer logo o filtro dos q vc deseja usar… é mais prático e rapido

=)

[quote=KassiPretti]malsan tem razão, seria melhor em vez de vc trazer todos os registros do banco fazer logo o filtro dos q vc deseja usar… é mais prático e rapido

=)[/quote]

com certeza seria a melhor forma…

mas ainda não tive a cadeira de Banco de Dados em minha facul… e não tenho nem noção de como fazer isso…

o nosso profeessor de programção mostrou algumas coisas básicas só para a gente salvar e buscar os valores…

o resto do processo… deve ser feito dentro do programa mesmo… como o de busca… comparação. .etc

Hummmm entendii
Então procure o metodo de substring em java, para vc poder buscar uma string menor dentro de outra como vc tá quendo fazer…

Vc pode usar um ResultSet.

O ResulSet é uma coleção que irá add os valores encontrador na pesquisa.
Seria algo mais ou menos assim, supondo que você já está conectado ao banco de dados, e qu eo nome da sua comexão é connection.


/**Cria o Statement para executar os comandos SQL*/
Statement st = connection.createStatement();

/**Cria a variável que irá armazenar a String Consulta*/
String query = "SELECT Nome FROM Tabela WHERE Nome LIKE '%PEDRO%'"

/**
a. Cria o ResultSet para armazenar os dados da pesquisa
b. Executa a pesquisa, armazenando os valores no ResultSet.
*/
ResultSet rs = st.executeQuery(query);

/**Cria a variável que irá contar o número de registros Pedro dentro da pesquisa*/
int count = 0;

/**
Navega no ResulSet. 
Enquando tiverem registros (next()), ele vai incrementar o count.
*/
while (rs.netx())
   count++

/**Exibe a quantidade de registros encontrados.*/
System.out.println("Qtde de Usuários que contêm o nome 'Pedro': " + count);

Vc pode também utilizar as interfaces Iterator e Collection para navegar e manipular os dados encontrados.
Dpa uma pesquisada no javadoc sobre: ResultSet, Collection, Iterator.

Espero ter ajudado
Qaulquer coisa, posta.

Abraços

Morte aos professores universitários sem noção!!!
Tenta usar o método indexOf(String s), que retorna a posição dum substring no string de onde é invocado. o método toLowerCase() também pode ajudar.
Assim:

for(String name : names){ if(name.toLowerCase().indexof(criterionName.toLowerCase()) >= 0){ found.add(name); } }

onde: names = lista de nomes que veio do banco, criterionName = nome a procurar e found = lista de nomes coincidentes!
E vê se estuda SQL depois desta!!!
Aquele abraço!!!
San

Você pode ter problemas se os nomes guardados no banco tiverem uma mistura de maiúsculas e minúsculas. Essas pesquisas com string geralmente são sensíveis à caixa do texto.

Alguns bancos tem funcões como o uppercase, e dá pra usar com “uppercase(nome) like ?”, que vai colocar o registros em caixa alta, daí é só passar um valor em maiúsculas.

Outros bancos dá pra colocar o modo de pesquisa de string em case insensitive, que ignora a caixa. Há opções também de accent insensitive, que ignora os acentos, onde A. a, á, ã, â são todos os mesmos caracteres.

Como foi dito, teste no seu programa o metodo indexOf()

Caso a string existir, ele ira retornar o valor da posição onde começa essa string. Caso nao existir, ira ser retornado um erro, que no caso é -1. Dai voce ve o que voce faz…

Nao lembro se diferencia maiuscula de minuscula, mas caso diferenciar, voce pode usar o metodo toUpperCase para o valor do db e na hora de pesquisa usar o mesmo metodo para passar o valor da pesquisa no mesmo tipo de letra, que no caso é maiuscula, assim tem menos chances de dar erro… :slight_smile:

Abraços

Concordo e discordo com o Bruno

Realmente, vc pode ter alguns problemas com a caixa do texto.
Porém, neste caso específico, onde a pesquisa é por nome próprio, parto do princípio de que todo nome prórpio começa com letra maísucla.

então, vc teria que mudar a string query:

String query = "SELECT Nome FROM Tabela WHERE Nome LIKE '%Pedro%'" 

Porém, se o valor da busca for repassado de algum lugar, o melhor seria encapsular numa variável e utilizar o jogo de toLowerCase() e toUpperCase() para fazer a pesquisa de todos os itens.

Então, eu alteraria:

/**Cria o Statement para executar os comandos SQL*/
Statement st = connection.createStatement();  

/**Encapsular a palacha-chave - String keyWord = (lugar de origem);
nesse caso, vou assumir que o cara digitou a palavra 'Pedro' */
String keyWord = "Pedro";
   
/**Cria a variável que irá armazenar a String Consulta
irá fazer a consulta utilizando as opções:
1. como usuário digitou (keyWord)
2. convertendo para caixa alta (keyWord.toUpperCase())
3. convertendo para caixa baixa (keyWord.toLowerCase())
*/  
 String query = "SELECT Nome FROM Tabela WHERE Nome LIKE '%" + keyWord 
           + "%' OR '%" + keyWord.toUpperCase() 
           + "%' OR '%" + keyWord.toLowerCase() 
           + "%'");

Você está sendo inocente. Se você partir desse principio, também tem que acreditar que o nome foi digitado corretamente pelo usuário, que o sistema tenha guardado na base o nome certinho, que você tenha controle exclusivo e total sobre esses dados, que todos os dados colocados lá antes do teu sistema aparecer estejam perfeitos, e pior, que todos os nomes próprios realmente comecem com maiúsculas.

Sério, isso não existe.

Fala Bruno, blz?

Realmente, eu estaria sendo inocente.
Porém, eu tenho a mania de acreditar nas pessoas.
Mas, também, pensando que o cara pode digitar diferente, que eu coloquei a 2ª opção.

Mas não quero abrir nenhuma discussão sobre esse assunto…

Abraços

[quote=berg.pb]Vc pode usar um ResultSet.

O ResulSet é uma coleção que irá add os valores encontrador na pesquisa.
Seria algo mais ou menos assim, supondo que você já está conectado ao banco de dados, e qu eo nome da sua comexão é connection.


/**Cria o Statement para executar os comandos SQL*/
Statement st = connection.createStatement();

/**Cria a variável que irá armazenar a String Consulta*/
String query = "SELECT Nome FROM Tabela WHERE Nome LIKE '%PEDRO%'"

/**
a. Cria o ResultSet para armazenar os dados da pesquisa
b. Executa a pesquisa, armazenando os valores no ResultSet.
*/
ResultSet rs = st.executeQuery(query);

/**Cria a variável que irá contar o número de registros Pedro dentro da pesquisa*/
int count = 0;

/**
Navega no ResulSet. 
Enquando tiverem registros (next()), ele vai incrementar o count.
*/
while (rs.netx())
   count++

/**Exibe a quantidade de registros encontrados.*/
System.out.println("Qtde de Usuários que contêm o nome 'Pedro': " + count);

Vc pode também utilizar as interfaces Iterator e Collection para navegar e manipular os dados encontrados.
Dpa uma pesquisada no javadoc sobre: ResultSet, Collection, Iterator.

Espero ter ajudado
Qaulquer coisa, posta.

Abraços[/quote]

usei esse códigos que vc me passou…

funcionou perfeitamente…
só mudei algumas coisasinhas de acordo ao meu programa…

[code]String nomeTEMP=campoNOME.getText();
if(nomeTEMP.equals("")){
JOptionPane.showMessageDialog(null,“Por favor digite um nome válido.”);
}else{

    String query = "SELECT * FROM dadosconta WHERE Nome LIKE '%"+nomeTEMP+"%'"; 
         boolean achado=false;
        try{
        ResultSet rec = st.executeQuery(query);
        while(rec.next()){   
         achado=true;    
         Tabela.addRow(new Object[] {rec.getString("conta"), rec.getString("nome"), rec.getString("cpf"), rec.getString("endereco"), rec.getString("cidade"), rec.getString("telefone"), rec.getString("saldo"), rec.getString("data")});             
        }
      
       
     }catch(SQLException s){
       System.out.println("sql erro:"+s.toString());
        
    }[/code]

mt obrigado…

Blz Cara…
Q bom que deu certo…
Po´rem, se o cara digitar mais de um espaço em branco??

Dá uma lida na subfunção ‘trim()’ da String, blz?

abraços

pois é… eu estou pegando os valores do banco de dados e jogando em uma variavel e estou fazendo a comparação dentro do meu programa em java…

eu queria por exemplo assim

[code]String nomeB=“Pedro”;
String nomeA=“Luis Pedro”;

if(nomeB.equals(nomeA){
SYstem.out.println(“Pessoas com o nome Pedro encontrado”);

}[/code]

eu queria algo do genero acima… só que com a função equals não vai funcionar… entendeu?[/quote]

Já vi soluções melhores de tratar a própria qry em si, mas só para comentar o exemplo que vc deu, além do IndexOf, temos também o contains:

[code]public class Test {
public static void main(String[] args) {
String nomeB = “Pedro”;
String nomeA = “Luis Pedro”;

    if (nomeA.contains(nomeB)) {
        System.out.println("Pessoas com o nome Pedro encontrado");
    } else {
        System.out.println("Não encontrei nada.");
    }
}

}[/code]

Só que o contains funciona com a teoria de conjuntos, logo, suponho que o IndexOf funcione melhor.

Espero ter ajudado.