Problemas com SELECT no Mysql

7 respostas
grandao2014

Pessoal, estou com um problema mas ainda não consegui resolver e espero que me ajudem.
Estou fazendo uma pesquisa no bd mysql e ele nao retorna o que eu quero.
Por exemplo: Tenho um cliente cadastrado no banco e o nome é: grandao 2014.
Quando eu digitar gra ou gran e clicar no botão pesquisar ele me retornar o nome completo grandao 2014 igual está no bd.
Não estou conseguindo desenvolver um select que me retorne o que eu quero.
Este é o ClienteDAO.

public Cliente pesquisa(Cliente clientes){

String sql = "SELECT * FROM cliente WHERE cliente_nome LIKE ?"; // O problema está nesta linha onde não consigo fazer a pesquisa.
            
            try {
		
		java.sql.PreparedStatement stmt = connection.prepareStatement(sql);
                    
		stmt.setString(1, clientes.getNome());
		ResultSet rs = stmt.executeQuery();
                                            
                        if(rs.next()){
                            clientes.setId(rs.getInt("cliente_id"));
                        	clientes.setNome(rs.getString("cliente_nome"));
                        	clientes.setCpf(rs.getString("cliente_cpf"));
                        	clientes.setRg(rs.getString("cliente_rg"));
                            clientes.setLogradouro(rs.getString("cliente_logradouro"));
                        	clientes.setBairro(rs.getString("cliente_bairro"));
                        	clientes.setEstado(rs.getString("cliente_estado"));
                            clientes.setCep(rs.getString("cliente_cep"));
                        	clientes.setTelefone(rs.getString("cliente_telefone"));
                            clientes.setEmail(rs.getString("cliente_email"));
                            clientes.setSexo(rs.getString("cliente_sexo"));
                            clientes.setEstado_civil(rs.getString("cliente_estado_civil"));
                            clientes.setProfissao(rs.getString("cliente_profissao"));
                            clientes.setData_nascimento(rs.getString("cliente_data_nascimento"));
                            
                            stmt.execute();
                            stmt.close();
                            
                        } else {
                            JOptionPane.showMessageDialog(null,"Cliente não localizado!");
                        	throw new SQLException("Registro não localizado ");
                        }
                    
            }catch(SQLException e){
                    throw new RuntimeException(e);
            }
            return clientes;
}

/////////////////////////////
////////////////////////////

Botão Pesquisar.

private void Bt_pesquisarActionPerformed(java.awt.event.ActionEvent evt) {

cliente.setNome(tf_nomepesquisa.getText());

dao.pesquisa(cliente);

tf_nomepesquisa.setText("");

tf_codigocliente.setText(Integer.toString(cliente.getId()));

tf_nome.setText(cliente.getNome());

tf_cpf.setText(cliente.getCpf());

tf_rg.setText(cliente.getRg());

tf_logradouro.setText(cliente.getLogradouro());

tf_bairro.setText(cliente.getBairro());

tf_estado.setText(cliente.getEstado());

tf_cep.setText(cliente.getCep());

tf_telefone.setText(cliente.getTelefone());

tf_email.setText(cliente.getEmail());

tf_sexo.setText(cliente.getSexo());

tf_estadocivil.setText(cliente.getEstado_civil());

tf_profissao.setText(cliente.getProfissao());

tf_datanascimento.setText(cliente.getData_nascimento());

}

Desde já agradeço!

7 Respostas

darklordkamui

seu select esta errado…

tenta algo assim

SELECT * FROM cliente where cliente_nome like “%dao%”

grandao2014
Cara, não deu certo.

Tentei:

String sql = SELECT * FROM cliente WHERE cliente_nome LIKE %dao%’”;

String sql = SELECT * FROM cliente WHERE cliente_nome LIKE %dao%;

String sql = SELECT * FROM cliente WHERE cliente_nome LIKE %clientes%’”;

String sql = SELECT * FROM cliente WHERE cliente_nome LIKE %clientes%;

String sql = SELECT * FROM cliente WHERE cliente_nome LIKE %?%’”;

String sql = SELECT * FROM cliente WHERE cliente_nome LIKE %?%;

Mas nada  certo.
Gleidson_Henrique

Qual o erro que está mostrando?

J

Olá! Veja se esse código abaixo resolve o seu problema. Ele funciona perfeitamente em uma pequena aplicação que estou desenvolvendo. Acredito que pra vc também será útil.

//Primeiramente tenho um método que me retornará um objeto do tipo ResultSet

public ResultSet getResultSet(String nome) throws SQLException{
        String sql = "select * from fornecedor where razao like '%" + nome
        + "%'order by id";

        PreparedStatement stmt = this.conexao.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        return rs;
    }

    //Consulta para listagem da Credor
    public List<Credor> listarCredor(String nome) throws SQLException{
        
        List<Credor> lista = new ArrayList<Credor>();

        ResultSet rs = getResultSet(nome);

        while (rs.next()) {
            Credor credor = new Credor();
            credor.setCodigo(rs.getInt("id"));
            credor.setRazaoSocial(rs.getString("razao"));
            credor.setFantasia(rs.getString("fantasia"));
            credor.setCpf(rs.getString("cpf"));
            credor.setCnpj(rs.getString("cgc"));
            credor.setLogradouro(rs.getString("endereco"));
            credor.setNumero(rs.getString("numero"));
            credor.setBairro(rs.getString("bairro"));
            credor.setCidade(rs.getString("cidade"));
            credor.setUf(rs.getString("uf"));
            credor.setCep(rs.getString("cep"));
            credor.setTelefone(rs.getString("telefone"));
            credor.setFax(rs.getString("fax"));
            credor.setDataCadastro(rs.getDate("data_cadastro"));
            lista.add(credor);
        }
        return lista;
    }

Até mais…

pmlm

Esse código pode até funcionar mas não é maneira correcta de fazer, já que está sujeito a SQL injection.

A maneira correcta é:

String sql = "SELECT * FROM cliente WHERE cliente_nome LIKE ?"; 

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString(1, "%" + clientes.getNome() + "%");  // Aqui é que devem ser colocadas as %
ResultSet rs = stmt.executeQuery(); 

...
darklordkamui

JOSE RONALDO LELES JUNIOR:
Olá! Veja se esse código abaixo resolve o seu problema. Ele funciona perfeitamente em uma pequena aplicação que estou desenvolvendo. Acredito que pra vc também será útil.

//Primeiramente tenho um método que me retornará um objeto do tipo ResultSet

public ResultSet getResultSet(String nome) throws SQLException{
        String sql = "select * from fornecedor where razao like '%" + nome
        + "%'order by id";

        PreparedStatement stmt = this.conexao.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        return rs;
    }

    //Consulta para listagem da Credor
    public List<Credor> listarCredor(String nome) throws SQLException{
        
        List<Credor> lista = new ArrayList<Credor>();

        ResultSet rs = getResultSet(nome);

        while (rs.next()) {
            Credor credor = new Credor();
            credor.setCodigo(rs.getInt("id"));
            credor.setRazaoSocial(rs.getString("razao"));
            credor.setFantasia(rs.getString("fantasia"));
            credor.setCpf(rs.getString("cpf"));
            credor.setCnpj(rs.getString("cgc"));
            credor.setLogradouro(rs.getString("endereco"));
            credor.setNumero(rs.getString("numero"));
            credor.setBairro(rs.getString("bairro"));
            credor.setCidade(rs.getString("cidade"));
            credor.setUf(rs.getString("uf"));
            credor.setCep(rs.getString("cep"));
            credor.setTelefone(rs.getString("telefone"));
            credor.setFax(rs.getString("fax"));
            credor.setDataCadastro(rs.getDate("data_cadastro"));
            lista.add(credor);
        }
        return lista;
    }

Até mais…

desse jeito ele vai tomar SQL Inject…

talvez se ele alterar esse trecho de codigo funcione…

stmt.setString(1, “%”+clientes.getNome()+"%");

grandao2014

Todas as respostas foram ótimas, gostei muito e aprendi também.
Muito obrigado a todos.

Criado 22 de setembro de 2012
Ultima resposta 22 de set. de 2012
Respostas 7
Participantes 5