Application does not save data and only saves code

1

I'm developing software for an MVC (model-view-controller) design video store and the problem of not saving people is occurring. It only saves the code of the people and I do not even know why it is happening not to save the clients because my source code does not present errors! In the MySQL database people are not marked with NOT NULL option.

Class VideoPessoa , of the view layer:

public class VideoPessoa extends javax.swing.JFrame {


    PessoaController pessoaController;
    Pessoa pessoa;




    /**
     * Creates new form Pessoa
     */
    public VideoPessoa() {
        initComponents();

        new Conexao();
        pessoaController = new PessoaController();
        pessoa = new Pessoa();
    }


private boolean salvarPessoa(){

     if (pessoaController.salvar(pessoa)) {
     JOptionPane.showMessageDialog(this, "Registro gravado com sucesso!");


    }else{

            JOptionPane.showMessageDialog(this, "Erro ao gravar os dados!", "ERRO", JOptionPane.ERROR_MESSAGE);

        }

    return true;


    }

Class PessoaController :

  public class PessoaController {

    private final PessoaDAO pessoaDAO;


    public PessoaController() {
        pessoaDAO = new PessoaDAO();


    }

    public boolean salvar(Pessoa pessoa) {
  boolean retorno ;


    retorno = pessoaDAO.salvar(pessoa);


  return retorno;
}

Class PessoaDAO , including saving people:

public class PessoaDAO {

    private Connection con;

    private final String SQLINSERT = " INSERT INTO pessoa(nome, endereco, bairro, sexo, telefone, celular, CPF, uf, cidade)"
            + " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?) ";

    private final String SQLPESSOAPELOCODIGO = "SELECT  nome, endereco, bairro, sexo, telefone, celular, CPF, uf, cidade"
            + " FROM pessoa"
            + " WHERE codigo=? ";

    private final String SQLSELECT = " SELECT  codigo, nome, endereco, bairro, sexo, telefone, celular, CPF,  uf, cidade FROM PESSOA";

    private final String SQLUPDATE = " UPDATE pessoa"
            + " SET nome = ?, "
            + " endereco = ?, "
            + " bairro   = ?, "
            + " sexo     = ?, "
            + " telefone = ?, "
            + " celular  = ?, "
            + " CPF      = ?, "

            + " uf       =?, "
            + " cidade   =?, "
            + " WHERE codigo = ?";
    private final String SQLDELETE = "DELETE FROM pessoa"
            + " WHERE codigo = ?";

    private PreparedStatement psInsert, sqlPessoaPeloCodigo, sqlSelect, sqlUpdate, sqlDelete;

    public PessoaDAO() {

        con = Conexao.getConnection();
        try {
            psInsert = con.prepareStatement(SQLINSERT);
            sqlPessoaPeloCodigo = con.prepareStatement(SQLPESSOAPELOCODIGO);
            sqlSelect = con.prepareStatement(SQLSELECT);
            sqlUpdate = con.prepareStatement(SQLUPDATE);
            sqlDelete = con.prepareStatement(SQLDELETE);
        } catch (SQLException ex) {
            Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

    }



public Pessoa getPessoaPeloCodigo(int codigo) {

        Pessoa pessoa = null;

        try {
            sqlPessoaPeloCodigo.setInt(1, codigo);
            ResultSet rs = sqlPessoaPeloCodigo.executeQuery();

            if (rs.next()) {
                //Instancia o novo filme
                pessoa = new Pessoa();

                //Seta as informações no filme
                pessoa.setCodigo(rs.getInt("codigo"));
                pessoa.setNome(rs.getString("nome"));
                pessoa.setEndereco(rs.getString("endereco"));
                pessoa.setBairro(rs.getString("bairro"));
                pessoa.setSexo(rs.getString("sexo"));
                pessoa.setTelefone(rs.getString("telefone"));
                pessoa.setCelular(rs.getString("celular"));
                pessoa.setCPF(rs.getString("CPF"));

                pessoa.setUf(rs.getString("uf"));
                pessoa.setCidade(rs.getString("cidade"));

            }
        } catch (SQLException ex) {
            Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return pessoa;
    }

 public boolean salvar(Pessoa pessoa) {
        boolean retorno = false;

        try {
            psInsert.setString(1, pessoa.getNome());
            psInsert.setString(2, pessoa.getEndereco());
            psInsert.setString(3, pessoa.getBairro());
            psInsert.setString(4, pessoa.getSexo());
            psInsert.setString(5, pessoa.getTelefone());
            psInsert.setString(6, pessoa.getCelular());
            psInsert.setString(7, pessoa.getCPF());
            psInsert.setString(8, pessoa.getUf());
            psInsert.setString(9, pessoa.getCidade());

            psInsert.executeUpdate();
            retorno = true;

        } catch (SQLException ex) {
            Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return retorno;
    }

Class Conexao :

public class Conexao {

    private static Connection con;

    public Conexao() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sistemavideolocadora2", "root", "1234");

            System.out.println(" Conexão obtida!!! ");

        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);

            System.out.println(" Conexão estabelecida com sucesso!!! ");
        }
    }

    public static Connection getConnection() {
        return con;


    }

    public static void closeConnection() {
        try {
            con.close();

            System.out.println(" Conexão fechada!!! ");
        } catch (SQLException ex) {
            Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);

            System.out.println(" Conexão finalizada com sucessso!!! ");
        }
    }


}
    
asked by anonymous 22.10.2015 / 19:01

2 answers

2

I gave a refactor in your code. Whenever possible, use the try-with-resources syntax with resources that should be properly closed such as Connection , PreparedStatement and ResultSet . This syntax ensures that they will be properly closed with minimal programming effort on the part of the programmer. Avoid keeping these features open longer than necessary unless you have a very strong reason to do so (and in your case, there are none).

Also, the way to report a problem is with the exception throw. Do not return true; succeeded and return false; if there was an error, because the purpose for which the exceptions exist is exactly so you do not have to do this, so learn how to use them. In addition, the exception may carry more information about the error than would be possible with a simple false .

Also be sure to fill in all the Pessoa data in the view, as explained by several colleagues in the comments in the question.

In this way, your code looks like this:

/**
 * Classe que sinaliza a ocorrência de uma falha na persistência da aplicação.
 */
public class PersistenciaException extends Exception {

    /**
     * Construtor da exceção.
     * @param message A mensagem de erro.
     * @param cause A causa do erro.
     */
    public PersistenciaException(String message, Throwable cause) {
        super(message, cause);
    }
}
public class Conexao {

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    private Conexao() {
        throw new UnsupportedOperationException("Esta classe não deve ser instanciada.");
    }

    public static Connection openConnection() {
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/sistemavideolocadora2", "root", "1234");
    }
}
public class PessoaDAO {

    private final String SQLINSERT = " INSERT INTO pessoa(nome, endereco, bairro, sexo, telefone, celular, CPF, uf, cidade)"
            + " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?) ";

    private final String SQLPESSOAPELOCODIGO = "SELECT nome, endereco, bairro, sexo, telefone, celular, CPF, uf, cidade"
            + " FROM pessoa"
            + " WHERE codigo = ?";

    private final String SQLSELECT = "SELECT codigo, nome, endereco, bairro, sexo, telefone, celular, CPF, uf, cidade FROM PESSOA";

    private final String SQLUPDATE = "UPDATE pessoa"
            + " SET nome = ?,"
            + " endereco = ?,"
            + " bairro   = ?,"
            + " sexo     = ?,"
            + " telefone = ?,"
            + " celular  = ?,"
            + " CPF      = ?,"
            + " uf       = ?,"
            + " cidade   = ?,"
            + " WHERE codigo = ?";

    private final String SQLDELETE = "DELETE FROM pessoa"
            + " WHERE codigo = ?";

    public PessoaDAO() {
    }

    public Pessoa getPessoaPeloCodigo(int codigo) throws PersistenciaException {
        try (
            Connection con = Conexao.openConnection();
            PreparedStatement ps = con.prepareStatement(SQLPESSOAPELOCODIGO)
        ) {
            ps.setInt(1, codigo);
            try (ResultSet rs = ps.executeQuery()) {
                if (!rs.next()) return null; // Não encontrou.
                // Instancia a nova pessoa.
                Pessoa pessoa = new Pessoa();

                // Seta as informações na pessoa
                pessoa.setCodigo(rs.getInt("codigo"));
                pessoa.setNome(rs.getString("nome"));
                pessoa.setEndereco(rs.getString("endereco"));
                pessoa.setBairro(rs.getString("bairro"));
                pessoa.setSexo(rs.getString("sexo"));
                pessoa.setTelefone(rs.getString("telefone"));
                pessoa.setCelular(rs.getString("celular"));
                pessoa.setCPF(rs.getString("CPF"));
                pessoa.setUf(rs.getString("uf"));
                pessoa.setCidade(rs.getString("cidade"));
                return pessoa;
            }
        } catch (SQLException ex) {
            throw new PersistenciaException("Problema de SQL na consulta de pessoa por código.", ex);
        }
    }

    public void salvar(Pessoa pessoa) throws PersistenciaException {
        try (
            Connection con = Conexao.openConnection();
            PreparedStatement psInsert = con.prepareStatement(SQLINSERT)
        ) {
            psInsert.setString(1, pessoa.getNome());
            psInsert.setString(2, pessoa.getEndereco());
            psInsert.setString(3, pessoa.getBairro());
            psInsert.setString(4, pessoa.getSexo());
            psInsert.setString(5, pessoa.getTelefone());
            psInsert.setString(6, pessoa.getCelular());
            psInsert.setString(7, pessoa.getCPF());
            psInsert.setString(8, pessoa.getUf());
            psInsert.setString(9, pessoa.getCidade());

            psInsert.executeUpdate();
        } catch (SQLException ex) {
            throw new PersistenciaException("Problema de SQL na inserção de pessoa.", ex);
        }
    }
}
public class PessoaController {
    private final PessoaDAO pessoaDAO;

    public PessoaController() {
        pessoaDAO = new PessoaDAO();
    }

    public void salvar(Pessoa pessoa) throws PersistenciaException {
        pessoaDAO.salvar(pessoa);
    }
}
public class VideoPessoa extends javax.swing.JFrame {
    private final PessoaController pessoaController;
    private Pessoa pessoa;

    /**
     * Creates new form Pessoa
     */
    public VideoPessoa() {
        initComponents();
        pessoaController = new PessoaController();
        pessoa = new Pessoa();
    }

    private void salvarPessoa() {
        try {
            pessoaController.salvar(pessoa);
            JOptionPane.showMessageDialog(this, "Registro gravado com sucesso!");
        } catch (PersistenciaException ex) {
            JOptionPane.showMessageDialog(this, "Erro ao gravar os dados!", "ERRO: " + ex.getMessage(), JOptionPane.ERROR_MESSAGE);
        }
    }

    // Resto da classe....
}
    
22.10.2015 / 20:50
3

You have not set values in the person object, at least I did not find the sets methods in the code:

    public VideoPessoa() {
        initComponents();

        new Conexao();
        pessoaController = new PessoaController();
        pessoa = new Pessoa();
    }


    private boolean salvarPessoa(){

     if (pessoaController.salvar(pessoa)) {
     JOptionPane.showMessageDialog(this, "Registro gravado com sucesso!");
ETC...

So pass personController.save (empty), the correct would be:

    public VideoPessoa() {
        initComponents();

        new Conexao();
        pessoaController = new PessoaController();
        pessoa = new Pessoa();
        pessoa.setnome('alguem');
        pessoa.settelefone('(11) 999991111');
    }


    private boolean salvarPessoa(){

     if (pessoaController.salvar(pessoa)) {
     JOptionPane.showMessageDialog(this, "Registro gravado com sucesso!");
ETC...

I do not know if the syntax is right, any error in the response please inform, thanks.

    
22.10.2015 / 20:54