Criando Consultas findBy

10 respostas
J

Ola galera !!!

bom estou com um problema no trabalho sou estagiario e ainda estou aprendendo…
bom pessoa a ajuda e compreensão de vcs…

eu tenho a classe sacado topo component e nela tem um botão pesquisar de onde vou criar uma consulta … nesse botao ja tem
a consulta geral que é uma consulta que é feita quando se digita algo no text fild sem selecionar ps radio butonns …
e agora eu rpeciso criar uma especifica para cada radio buton usando findBy…

agora não sei exatamente como colocar a nova consulta no mesmo botao … pelo que eu entendi tenho que criar um metodo e dentro desse metodo
ter o findBy"codigo" no caso…

Segue o meu botao pesquisar

private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        try {
            sacadosDB = new SacadosDB();                        
            Object[] columns = {"Código", "CNPJ/CPF", "Nome"};
            DefaultTableModel tableModel = new DefaultTableModel(columns, 0);
            gridSacados.setModel(tableModel);
            sacadoList = sacadosDB.findAll();
            for (Sacado sacado : sacadoList) {
                String cpfCnpj = null;
                if (sacado.getTipoInscricao().equals("1")) {
                    cpfCnpj = Format.formatCPF(sacado.getCpfCnpj().toString(), false);
                } else {
                    cpfCnpj = Format.formatCNPJ(sacado.getCpfCnpj().toString(), false);
                }
                tableModel.addRow(new String[]{sacado.getCodigo().toString(), cpfCnpj, sacado.getNome()});
            }
            lblSacConsultados.setText(String.valueOf(sacadoList.size()));
        } catch (Exception e) {
            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no BD ao recuperar sacados", e);
            NotifyDescriptor notifyDescriptor =
                    new NotifyDescriptor.Message(
                    NbBundle.getMessage(SacadosTopComponent.class, "DATABASE_ERROR"),
                    NotifyDescriptor.ERROR_MESSAGE);
            DialogDisplayer.getDefault().notify(notifyDescriptor);
        }

Segue agora a minha tentativa de fazer algo porem creio estar bem longe…

Caso tenha algum erro grotesco peço desculpas desde ja …

private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        try {
            sacadosDB = new SacadosDB();                        
            Object[] columns = {"Código", "CNPJ/CPF", "Nome"};
            DefaultTableModel tableModel = new DefaultTableModel(columns, 0);
            gridSacados.setModel(tableModel);
            sacadoList = sacadosDB.findAll();
            for (Sacado sacado : sacadoList) {
                String cpfCnpj = null;
                if (sacado.getTipoInscricao().equals("1")) {
                    cpfCnpj = Format.formatCPF(sacado.getCpfCnpj().toString(), false);
                } else {
                    cpfCnpj = Format.formatCNPJ(sacado.getCpfCnpj().toString(), false);
                }
                tableModel.addRow(new String[]{sacado.getCodigo().toString(), cpfCnpj, sacado.getNome()});
            }
            lblSacConsultados.setText(String.valueOf(sacadoList.size()));
        } catch (Exception e) {
            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no BD ao recuperar sacados", e);
            NotifyDescriptor notifyDescriptor =
                    new NotifyDescriptor.Message(
                    NbBundle.getMessage(SacadosTopComponent.class, "DATABASE_ERROR"),
                    NotifyDescriptor.ERROR_MESSAGE);
            DialogDisplayer.getDefault().notify(notifyDescriptor);
        }
      
    private static void testePesquisar(java.awt.event.ActionEvent evt) {
        if (rbCodigoMouseClicked()) {

            try {
                sacadoList = sacadosDB.findByNome();
                tableModel.addRow(new String[]{sacado.getCodigo().toString()});
            }
            lblSacConsultados.setText(String.valueOf(sacadoList.size()));
    
         catch( Exception e ) {
            Logger.getLogger("com.eversystems.offlinee").log(Level.SEVERE, "Erro no BD ao recuperar sacados", e);
        NotifyDescriptor notifyDescriptor =
                new NotifyDescriptor.Message(
                NbBundle.getMessage(SacadosTopComponent.class, "DATABASE_ERROR"),
                NotifyDescriptor.ERROR_MESSAGE);
        DialogDisplayer.getDefault().notify(notifyDescriptor);
    }
    }

    }
    



}
    


    }

Obrigado galera espero a ajuda de vcs.

10 Respostas

D

Eu acho o mais correto fazer a pesquisa no banco de acordo com o que precisar pra economizar banda...

Você irá criar um ButtonGroup com os radiobuttons...eu coloquei esses nomes. você vai precisar mudar ou criar apenas esses novos métodos

isso vai dentro do action do botão:
if (rbCodigo.isSelected())

sacadoList = sacadosDB.findByCodigo(seuTextField.getText()); 

else if (rbCpfCnpj.isSelected())

sacadoList = sacadosDB.findByCpfCnpj(seuTextField.getText()); 

else if (rbNome.isSelected())

sacadoList = sacadosDB.findByNome(seuTextField.getText());
J

Ola amigão começou a dar certo por aqui sua ajuda foi de grande utilidade vlw mesmo porem ainda preciso da ajuda…

eis aqui o codigo para o radio Codigo

if ((rbCodigo.isSelected())){
           try {
            sacadosDB = new SacadosDB();                        
            Object[] columns = {"Código", "CNPJ/CPF", "Nome"};
            DefaultTableModel tableModel = new DefaultTableModel(columns, 0);
            gridSacados.setModel(tableModel);
            sacadoList = sacadosDB.findByCodigo();       
            lblSacConsultados.setText(String.valueOf(sacadoList.size()));
            
           } catch (Exception e) {
              Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no BD ao recuperar sacados", e);
            NotifyDescriptor notifyDescriptor =
                    new NotifyDescriptor.Message(
                    NbBundle.getMessage(SacadosTopComponent.class, "DATABASE_ERROR"),
                    NotifyDescriptor.ERROR_MESSAGE);
            DialogDisplayer.getDefault().notify(notifyDescriptor);
               
            }
        }

Creio que agora vai dar certo

o que acha?

D

só que vai repetir muito código eu fiz assim:

try {  
         sacadosDB = new SacadosDB();                          
         Object[] columns = {"Código", "CNPJ/CPF", "Nome"};  
         DefaultTableModel tableModel = new DefaultTableModel(columns, 0);  
         gridSacados.setModel(tableModel);  
         
         //aqui houve a mudança, assim ele ja funciona para os 3 radios
         
         if (rbCodigo.isSelected()){
        	 sacadoList = sacadosDB.findByCodigo();  
         }
         if (rbCpfCnpj.isSelected()){
             sacadoList = sacadosDB.findByCpfCnpj();  
             }
         if (rbNome.isSelected()){
             sacadoList = sacadosDB.findByNome();  
             }
         //fim da mudança
         
         lblSacConsultados.setText(String.valueOf(sacadoList.size()));  
           
       } catch (Exception e) {  
          Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no BD ao recuperar sacados", e);  
       NotifyDescriptor notifyDescriptor =  
                new NotifyDescriptor.Message(  
                NbBundle.getMessage(SacadosTopComponent.class, "DATABASE_ERROR"),  
                NotifyDescriptor.ERROR_MESSAGE);  
        DialogDisplayer.getDefault().notify(notifyDescriptor);  
             
        }  
   }

o método findBy..... ele ja pega o texto do jtextfield? caso não pegue você vai ter que passar como parâmetro igual coloquei la em cima.

P

Se vc tiver usando hibernate ou jpa2, vc pode diminuir bastante o desenvolvimento de metodos para consulta usando reflection…
Eu criei um projeto para facilitar o uso de reflection para consultas de entidades, caso se interesse: http://www.guj.com.br/posts/list/221618.java

D

hum…parece interessante, eu não conheço nada de hibernate e jpa…precisso estudar…hehe

J

ola galerinha!!!

bom a parte de acesso Ja esta pronta Graças a ajuda de vcs muito obrigado !!

cada metodo daquele acessa o metodo respectivo na classe SacadosDB onde ficam as instruções de sql

pelo que eu entendi esta certo gostaria que alguem verificasse por favor meu superior falou que eu tinha apenas que colocar um where e foi o que fiz…

bom segue o metodo pronto que acessa a classe db

if (rbNomeFantasia.isSelected()){
             sacadoList = sacadosDB.findByNomeFantasia(txtNomeFantasia.getText());

e aki vai o metodo que ele acessa que contem as intruções sql

public List<Sacado> findByNomeFantasia(String nomeFantasia) throws SQLException {

        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        Sacado sacado = null;
        List<Sacado> sacadoList = new ArrayList<Sacado>();

        try {

            connection = offlineDB.getConnection();

            preparedStatement = connection.prepareStatement("Where"); <<<<<<Como faço esse WHERE aki ??? seria tipo where_SCD_NM_FNT ???

            resultSet = preparedStatement.executeQuery();

            if (resultSet.next()) {
                do {

                    sacado = new Sacado();
                   
                    sacado.setNomeFantasia(resultSet.getString("SCD_NM_FNT"));
                                     
                    sacadoList.add(sacado);
                } while (resultSet.next());
            }

        } catch (SQLException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);
            throw new SQLException(e);

        }  catch (DBDriverNotFoundException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBInUseException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBConnectionException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBNotConfiguredException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } finally {

            if (resultSet != null) {
                resultSet.close();
            }

            if (preparedStatement != null) {
                preparedStatement.close();
            }

            if (connection != null) {
                connection.close();
            }

        }

        return sacadoList;

    }

pesso por favor que ferifiquem se esta correto
pra min é um pouco complicado …comecei a pouco tempo sou estagiario e me colocaram pra fazer consultas ja … axo que um pouco precipitado.
porem devagarzinho vou indo vlw galera espero a resposta.

D

.

D

quando ele disse where era na consulta sql..rsrs

por exemplo:

//essa query busca pelo código

public List<Sacado> findByCodigo(String codigo) throws SQLException { 

preparedStatement = connection.prepareStatement("SELECT * FROM NOMEDATABELA WHERE CODIGO = ?");
preparedStatement.setString(1, codigo); 
resultSet = preparedStatement.executeQuery(); 
.................
//continuação do seu codigo
//essa query busca pelo nome

public List<Sacado> findByNomeFantasia(String nomeFantasia) throws SQLException { 

preparedStatement = connection.prepareStatement("SELECT * FROM NOMEDATABELA WHERE Nome Like %?%");

preparedStatement.setString(1, nomeFantasia); 
resultSet = preparedStatement.executeQuery(); 
.................
//continuação do seu codigo

essa é a query do código, você deve alterar o nome da tabela para o nome da tabela no seu banco.

o cpf você usa o mesmo esquema do nome só altera as variáveis

D

vi no seu código que você tem:

sacado.setNomeFantasia(resultSet.getString(“SCD_NM_FNT”));

só que assim ele irá ficar apenas com o nomefantasia carregado…

você tem que colocar os 3 itens que iram aparecer na tabela, isso ficará nas 3 queries.

sacado.setNomeFantasia(resultSet.getString(“SCD_NM_FNT”));
sacado.setCodigo(resultSet.getString(“SCD_NM_FNT”)); <<-- altera o nome do campo
sacado.setCnpjCpf(resultSet.getString(“SCD_NM_FNT”)); <<-- altera o nome do campo

J

Bom resiolvido galerinha …

O problema nessa questao da parte sql …
é qua eu ainda não tinham me apresentado as Queries …foi bem simples

vou deixar aki para que outros vejam…
aqui esta a SacadoFindBy Codigo na classe SacadosDB

public Sacado findByCodigo(Long codigo) throws SQLException {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {

            connection = offlineDB.getConnection();

            preparedStatement = connection.prepareStatement(FIND_BY_CODIGO);<<<< FYND BY CODIGO chama a query
            preparedStatement.setLong(1, codigo);

            resultSet = preparedStatement.executeQuery();

            Sacado sacado = null;
            if (resultSet.next()) {
                sacado = new Sacado();
                sacado.setCodigo(resultSet.getLong("SCD_ID"));
                    sacado.setTipoInscricao(resultSet.getString("SCD_TP_DOC"));
                    sacado.setCpfCnpj(resultSet.getLong("SCD_CNPJ_CPF"));
                    sacado.setNomeFantasia(resultSet.getString("SCD_NM_FNT"));
                    sacado.setNome(resultSet.getString("SCD_NM"));
                    sacado.setGrupo(resultSet.getString("SCD_GRP"));
                    sacado.setEndereco(resultSet.getString("SCD_DS_END"));
                    sacado.setBairro(resultSet.getString("SCD_NM_BRR"));
                    sacado.setCep(resultSet.getInt("SCD_CD_CEP"));
                    sacado.setCidade(resultSet.getString("SCD_NM_CID"));
                    sacado.setUf(resultSet.getString("EST_ID"));
                    sacado.setDdd(resultSet.getInt("SCD_CD_DDD"));
                    sacado.setTelefone(resultSet.getLong("SCD_NR_TEL"));
                    sacado.setRamal(resultSet.getInt("SCD_NR_RML"));
                    sacado.setDdi(resultSet.getInt("SCD_CD_DDI_FAX"));
                    sacado.setDddFax(resultSet.getInt("SCD_CD_DDD_FAX"));
                    sacado.setFax(resultSet.getLong("SCD_NR_FAX"));
                    sacado.setAvalista(resultSet.getString("SCD_NM_AVL"));
                    sacado.setCpfCnpjAvalista(resultSet.getLong("SCD_CNPJ_CPF_AVL"));
                    sacado.setAbatimento(resultSet.getBigDecimal("SCD_VL_ABT"));
                    sacado.setPercentjurosMulta(resultSet.getBigDecimal("SCD_PC_JUR_MLT"));
                    sacado.setQuantidadeDias(resultSet.getInt("SCD_QT_DIA"));
                    sacado.setIof(resultSet.getBigDecimal("SCD_PC_IOF"));
                    sacado.setPercentDesconto(resultSet.getBigDecimal("SCD_PC_DSC"));
                    sacado.setValorDesconto(resultSet.getBigDecimal("SCD_VL_DSC"));
                    sacado.setMensagem1(resultSet.getString("SCD_DS_MSG1"));
                    sacado.setMensagem2(resultSet.getString("SCD_DS_MSG2"));
                    sacado.setMensagem3(resultSet.getString("SCD_DS_MSG3"));
                    sacado.setEmail(resultSet.getString("SCD_DS_EML"));
                    sacado.setTipoDocAvalista(resultSet.getString("SCD_TP_DOC_AVL"));
            }

        } catch (SQLException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);
            throw new SQLException(e);

        }  catch (DBDriverNotFoundException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBInUseException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBConnectionException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } catch (DBNotConfiguredException e) {

            Logger.getLogger("com.eversystems.offline").log(Level.SEVERE, "Erro no acesso ao banco de dados", e);

        } finally {

            if (resultSet != null) {
                resultSet.close();
            }

            if (preparedStatement != null) {
                preparedStatement.close();
            }

            if (connection != null) {
                connection.close();
            }
        }

        return null;
    }

e aqui esta a Query que é chamada.

private static final String FIND_BY_CODIGO = ""
            .concat("SELECT \r\n")
            .concat(FIELDS)
            .concat("FROM \r\n")
            .concat("   TB_SACADOS \r\n")
            .concat("WHERE \r\n")
            .concat("   SCD_ID = ?");

Vlw galera pela ajuda !!!

muito obrigado mesmo !!

Terminei !!

Criado 17 de novembro de 2010
Ultima resposta 18 de nov. de 2010
Respostas 10
Participantes 3