Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Montesuma Oliveira

Errro no método Alterar - Java e MySQL

Recommended Posts

Mestres do Java, estou trabalhando em um projeto da faculdade, usando camadas MVC, e estou com problemas no método alterarCliente. Quando clico no botão Alterar, no formulário, ele envia uma mensagem dizendo que o cliente foi alterado com sucesso, mas ao pesquisar o cliente alterado, o mesmo não fez a alteração. Gostaria de saber onde estou errando. Segue abaixo as minhas classes:
Classe Conexão com o MySQL:
 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.uniplan.DAL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
 *
 * @author Montesuma Oliveira
 */
public class ConexaoMySQL {
     public Connection con;
     public PreparedStatement ps;
     public ResultSet rs;
     public String sql;
     public void abrirBD()throws Exception
     {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/ipil_ltda";
        String user = "root";//Seu nome de usuário.
        String password = "uniplan";  //Sua senha.
        con = DriverManager.getConnection(url, user, password);
     }
    public void fecharBD() throws Exception
    {
        if(con != null)
        {
            con.close();
        }
    }   
}

Classe ClienteDAL:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.uniplan.DAL;
import br.uniplan.DTO.ClienteDTO;
import java.util.ArrayList;
import java.util.List;
/**
 *
 * @author Montesuma Oliveira */
public class ClienteDAL extends ConexaoMySQL {
    public void incluirCliente(ClienteDTO cliente) throws Exception
    {
        //Prepara a conexão com o MySQL
        abrirBD();
        sql = "INSERT INTO clientes (cli_nome, cli_dt_inclusao, cli_endereco, cli_bairro, cli_email, cli_tel, cli_cidade, cli_uf) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
        ps = con.prepareStatement(sql);
        //Busca os valores da classe clientesDTO
        //ps.setLong(1, cliente.getCli_id());
        ps.setString(1, cliente.getCli_nome());
        ps.setDate(2, new java.sql.Date(cliente.getCli_dt_inclusao().getTime()));
        ps.setString(3, cliente.getCli_endereco());
        ps.setString(4, cliente.getCli_bairro());
        ps.setString(5, cliente.getCli_email());
        ps.setString(6, cliente.getCli_tel());
        ps.setString(7, cliente.getCli_cidade());
        ps.setString(8, cliente.getCli_uf());
        ps.execute();
        fecharBD();
    }
    public ClienteDTO selecionarClientePorID(Integer cli_id)throws Exception
    {
        abrirBD();
        sql = "SELECT * FROM clientes WHERE cli_id=?";
        ps = con.prepareStatement(sql);
        ps.setInt(1, cli_id);
        rs = ps.executeQuery();
        ClienteDTO cliente = new ClienteDTO();
        if(rs.next())
        {
            cliente.setCli_id(rs.getInt("cli_id"));
            cliente.setCli_nome(rs.getString("cli_nome"));
            cliente.setCli_dt_inclusao(rs.getDate("cli_dt_inclusao"));
            cliente.setCli_endereco(rs.getString("cli_endereco"));
            cliente.setCli_bairro(rs.getString("cli_bairro"));
            cliente.setCli_email(rs.getString("cli_email"));
            cliente.setCli_tel(rs.getString("cli_tel"));
            cliente.setCli_cidade(rs.getString("cli_cidade"));
            cliente.setCli_uf(rs.getString("cli_uf"));
            fecharBD();           
        }
        return cliente;
    }
    //Método que vai selecionar todos os clientes no nosso Banco de Dados
    //e ordenar por nome do cliente
     public List selecionarListaClientes() throws Exception
     {
         abrirBD();
         sql = "SELECT * FROM clientes ORDER BY cli_nome";
         ps = con.prepareStatement(sql);
         rs = ps.executeQuery();
         List listaClientes = new ArrayList();
         while(rs.next())
         {
             ClienteDTO cliente = new ClienteDTO();
             cliente.setCli_id(rs.getInt("cli_id"));
             cliente.setCli_nome(rs.getString("cli_nome"));
             cliente.setCli_dt_inclusao(rs.getDate("cli_dt_inclusao"));
             cliente.setCli_endereco(rs.getString("cli_endereco"));
             cliente.setCli_bairro(rs.getString("cli_bairro"));
             cliente.setCli_email(rs.getString("cli_email"));
             cliente.setCli_tel(rs.getString("cli_tel"));
             cliente.setCli_cidade(rs.getString("cli_cidade"));
             cliente.setCli_uf(rs.getString("cli_uf"));
             listaClientes.add(cliente);        
         }
         fecharBD();
         return listaClientes;
     }
     //Método que vai fazer as alterações necessárias nos dados dos clientes
     //selecionados por seu código no nosso Banco de Dados
     public void alterarCliente(ClienteDTO cliente) throws Exception
     {
         abrirBD();        
         sql = "UPDATE clientes SET cli_nome = ?, cli_dt_inclusao = ?, cli_endereco = ?, cli_bairro = ?, cli_email = ?, cli_tel = ?, cli_cidade = ?, cli_uf = ? WHERE cli_id = ?";
         ps = con.prepareStatement(sql);
         ps.setLong(1, cliente.getCli_id());
         ps.setString(2, cliente.getCli_nome());
         ps.setDate(3, new java.sql.Date(cliente.getCli_dt_inclusao().getTime()));
         ps.setString(4, cliente.getCli_endereco());
         ps.setString(5, cliente.getCli_bairro());
         ps.setString(6, cliente.getCli_email());
         ps.setString(7, cliente.getCli_tel());
         ps.setString(8, cliente.getCli_cidade());
         ps.setString(9, cliente.getCli_uf());
         ps.execute();
         fecharBD();
     }
     public void excluirCliente(Integer cli_id) throws Exception
     {
         abrirBD();
         sql = "DELETE FROM clientes WHERE cli_id=?";
         ps = con.prepareStatement(sql);
         ps.setInt(1, cli_id);
         ps.execute();
         fecharBD();
     }
}

Classe ClienteDTO:

    /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.uniplan.DTO;
import java.util.Date;
/**
 *
 * @author Montesuma Oliveira
*/
public class ClienteDTO {
    private long cli_id;
    private String cli_nome;
    private Date cli_dt_inclusao;
    private String cli_endereco;
    private String cli_bairro;
    private String cli_email;
    private String cli_tel;
    private String cli_cidade;
    private String cli_uf;
   
    public long getCli_id()
    {
        return cli_id;
    }   
    public void setCli_id(int cli_id)
    {
        this.cli_id = cli_id;
    }
   
    public String getCli_nome()
    {
        return cli_nome;
    }   
    public void setCli_nome(String cli_nome)
    {
        this.cli_nome = cli_nome;
    }
   
    public Date getCli_dt_inclusao()
    {
        return this.cli_dt_inclusao;
    }   
    public void setCli_dt_inclusao(Date cli_dt_inclusao)
    {
        this.cli_dt_inclusao = cli_dt_inclusao;
    }
   
    public String getCli_endereco()
    {
        return cli_endereco;
    }   
    public void setCli_endereco(String cli_endereco)
    {
        this.cli_endereco = cli_endereco;
    }
   
    public String getCli_bairro()
    {
        return cli_bairro;
    }   
    public void setCli_bairro(String cli_bairro)
    {
        this.cli_bairro = cli_bairro;
    }
   
    public String getCli_email()
    {
        return cli_email;
    }
    public void setCli_email(String cli_email)
    {
        this.cli_email = cli_email;
    }   
   
    public String getCli_tel()
    {
        return cli_tel;
    }
    public void setCli_tel(String cli_tel)
    {
        this.cli_tel = cli_tel;
    }
   
    public String getCli_cidade()
    {
        return cli_cidade;
    }
    public void setCli_cidade(String cli_cidade)
    {
        this.cli_cidade = cli_cidade;
    }
   
    public String getCli_uf()
    {
        return cli_uf;
    }
    public void setCli_uf(String cli_uf)
    {
        this.cli_uf = cli_uf;
    }
   
}

Código do Botão Alterar Cliente:
        private void btnAlterarCliActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
         // fazendo a validação dos dados, o método isEmpty que devolve true se a String for vazia ou false se a mesma nã estiver vazia
        if ((txtNomeCli.getText().isEmpty()) || (ftfDtInclusaoCli.getText().isEmpty()) || (txtEnderecoCli.getText().isEmpty())
                || (txtBairroCli.getText().isEmpty()) || (ftfTelCli.getText().isEmpty()) || (txtCidadeCli.getText().isEmpty())
                || (txtUFCli.getText().isEmpty()))
        {
            JOptionPane.showMessageDialog(null, "Verifique Se Tem Algum Campo Vazio !!!!");
            //O cursor do mouse vai se posicionado no campo Código do Cliente
            txtCodigoCli.requestFocus();
        }
        else
        {
            // instanciando a classe ClientesDTO do pacote DTO e criando seu objeto cliente
            ClienteDTO cliente = new ClienteDTO();
            // Instancia a classe ClienteDAL
            ClienteDAL dal = new ClienteDAL();
             //Formatando a data
            SimpleDateFormat dti = new SimpleDateFormat("dd/MM/yyyy");
            cliente.setCli_id(Integer.parseInt(txtCodigoCli.getText()));
            cliente.setCli_nome(txtNomeCli.getText());
            //Verifica se a data esta formatada e faz o tratamento do erro de Parseamento
            try
            {
                cliente.setCli_dt_inclusao(new java.sql.Date(dti.parse(ftfDtInclusaoCli.getText()).getTime()));
            }
            catch (ParseException ex)
            {
            }
            //Mostra os dados que estão gravados na tabela Clientes
            cliente.setCli_endereco(txtEnderecoCli.getText());
            cliente.setCli_bairro(txtBairroCli.getText());
            cliente.setCli_email(txtEmailCli.getText());
            cliente.setCli_tel(ftfTelCli.getText());
            cliente.setCli_cidade(txtCidadeCli.getText());
            cliente.setCli_uf(txtUFCli.getText());
            try
            {
                // Chama o método alterarCliente da Classe ClienteDAL
                dal.alterarCliente(cliente);
            }
            catch (Exception ex)
            {
                Logger.getLogger(frmClientes.class.getName()).log(Level.SEVERE, null, ex);
            }
            JOptionPane.showMessageDialog(null, "Cliente " + cliente.getCli_nome() + " Alterado Com Sucesso !!!!");
        }       
    }

Todos os outros métodos estão funcionando, somente o Alterar Cliente não funciona, quem puder ajudar, eu agradeço de antemão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por douglas79
      Bom dia,

      Há alguns dias que venho instalar o apache, o php, mysql e o phpmyadmin manualmente e sem obter sucesso. Até consegui rodar o php, porém, quando vou baixar a úitima versão do MYSQL, não tem todos os pacotes nele instalados, inclusive no completo, só encontro o Router.
      Alguém pode me dizer o porquê que isso está ocorrendo?
      Desde já agradeço a ajuda de vocês, que será bem vinda!
      No aguardo!

      Uso a versão 8.3.9 do PHP
      Meu SO é o Windows 10 32 bits
    • Por landerbadi
      Tenho uma tabela chamada "item" com os seguintes campos: id, name, active. Nela tem cadastrado vários itens. No campo "active" eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo active. E outra tabela chamada "product" com os seguintes campos (id, name) com os seguintes registros: 1, Produto A 2, Produto B 3, Produto C E uma terceira tabela chamada "product_item" com os seguintes campos (productID, itemID). No campo productID eu coloco o id de um produto da tabela "product" e no campo "itemID" eu coloco o id do produto da tabela "item". Exemplo: 1, 1 1, 3 1, 4 2, 3 2, 4 Sendo assim o produto A da tabela 'product" comtem os itens casa, cama e moto. Eu preciso fazer uma busca da seguinte maneira:  Eu escolho um registro da tabela "item", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "product" que contenham a palavra "casa" e que os demais itens estejam ativos no siste. Ou seja, que contenham um "S" no campo "active"  Eu consegui fazer isso da seguinte maneira: SELECT P.id, P.name, GROUP_CONCAT(I.name ORDER BY I.name) AS items FROM product P JOIN product_item PI ON P.id = PI.productID JOIN item I ON I.id = PI.itemID AND I.active = 'S' WHERE P.id NOT IN ( SELECT PI.productID FROM product_item PI JOIN item I ON I.id = PI.itemID WHERE I.active IS NULL ) AND P.id IN ( SELECT PI.productID FROM product_item PI JOIN item I ON I.id = PI.itemID WHERE I.name = 'mesa' ) GROUP BY P.id, P.name; O problema que eu estou tendo é o seguinte:
      Quando eu jogo este código para o banco de dados onde eu já tenho os registros cadastrado o php fica lendo uma eternidade e não lista os produtos.
       
      Usando código no banco de dados que eu fiz para testes ele funciona perfeitamente pois nele tem poucos registros.
       
      No banco de dados principal a tabela "item" tem 11.196 registros. A tabela "product" tem 88.214 registros e a tabela "product_item" tem 518.378 registros. 
       
      Eu acredito que, devido o banco de dados ser muito grande, ele não consegue listar.
       
      Alguém sabe de algum meio de resolver isso?
       
       
    • Por clovis.sardinha
      Boa noite.
      Tenho um bd com 2 tabelas. A primeira (serv_os) tem as colunas id, fk_os e fk_servico  a segunda (prod_os) tem as colunas id, fk_os e agora eu criei a coluna fk_serv. A coluna fk_serv vai ser preenchida com o valor id da primeira coluna. Fiz o seguinte update entre as tabelas: 
      UPDATE prod_os
      JOIN serv_os ON serv_os.fk_os= prod_os.fk_os
      SET prod_os.fk_serv = serv_os.id
      WHERE prod_os.fk_os=serv_os.fk_os;
       
      Até aqui tudo bem, porém, fiquei com o seguinte problema.  Muitas vezes  existem vários serviços na primeira tabela, por exemplo id=100 produto A, id=101 produto B, porém o fk_os é o mesmo . Ai na coluna fk_serv aparece sempre o id do produto A. Nesse caso duas vezes. O produto B, C,...etc não aparece. 
      Não consegui nenhum comando, já que o join é pela coluna fk_os, que fizesse o update mudar o ponteiro para o serviço B,C,etc.
      Se alguém puder me ajudar eu agradeço.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.