Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Update com JComboBox

Boa noite,

Não sei se me expressei bem no título do tópico.

Mas vamos ao problema em questão,

Tenho um VIEW que tem como único objetivo alterar 1 única coluna de uma tabela.

  1. Eu seleciono na tabela já carregada do banco de dados 1 das linhas em questão.
  2. A linha carrega as informações nos JTEXTFIELDS.
  3. Clico no botão salvar e ele deveria pegar apenas a informação final que constar no JCOMBOBOX e com isso gerar um UPDATE em uma tabela.

O problema está que acusa nullpointerexception e não consigo entender o porque.

Código:

  • BOTÃO SALVAR
    private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                              

        //CHAMA METODO ALTERA PERMISSAO
        controller.alteraPermissao();

    }     
  • CONTROLLER alteraPermissao()
    public void alteraPermissao(){

        String id_usuario = view.getjTextFieldID().getText();
        Object cod_permissao = view.getjComboBoxPermissao().getSelectedIndex();

        Usuario alterausuario;
        alterausuario = new Usuario(id_usuario,  cod_permissao.toString());

        try{
        Connection conexao;
        conexao = new Conexao().getConnection();

        UsuarioDAO usuarioDao = new UsuarioDAO(conexao);
        usuarioDao.updatePermissao(alterausuario);

            JOptionPane.showMessageDialog(null, "Permissão alterada com sucesso!");
        } catch (SQLException ex) {
             Logger.getLogger(FormCadastroView.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
  • DAO updatePermissao
//MÉTODO PARA ATUALIZAR/ALTERAR PERMISSAO
    public void updatePermissao(Usuario usuario) throws SQLException {

            String sql = "update usuario"
                        + "set cod_permissao = ?"
                        + "where id_usuario = ?";

            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setInt(1, usuario.getCod_permissao());
            statement.setInt(2, usuario.getId_usuario());

            statement.execute();

            connection.close();

    }

O sistema acusa erro direto na linha

"statement.setInt(1, usuario.getCod_permissao());"

Que fica no DAO

  • MODELO - CONSTRUTOR
   //USADO PARA ALTERAR PERMISSAO
    public Usuario(int id_usuario, Object cod_permissao){
        this.id_usuario = id_usuario;
        this.cod_permissao = (Integer) cod_permissao;
4 respostas

Fala Rafael,

Na linha abaixo:

statement.setInt(1,  usuario.getCod_permissao());

Temos 2 objetos: PreparedStatement e Usuario. O null pointer pode indicar que um deles está nulo.

Se puder postar a stacktrace, talvez ajude a gente a entender o erro.

Se puder me dizer como implantar o stacktrace no código eu agradeço. Faz muito tempo que não uso.

Então, sobre o que você falou. Sim, está retornando nulo. Eu fiz o teste no controller ainda, antes de entrar no DAO

public void alteraPermissao(){

        String id_usuario = view.getjTextFieldID().getText();
        Object cod_permissao = view.getjComboBoxPermissao().getSelectedIndex();

        JOptionPane.showMessageDialog(null, "AlterarPermissaoController");
        JOptionPane.showMessageDialog(null, "PASSO 1");
        JOptionPane.showMessageDialog(null, "ID:" + id_usuario + " | " + "PERMISSAO SELECIONADA:" + cod_permissao);

        Usuario alterausuario;
        alterausuario = new Usuario(id_usuario,  cod_permissao.toString());

        JOptionPane.showMessageDialog(null, "AlterarPermissaoController");
        JOptionPane.showMessageDialog(null, "PASSO 2");
        JOptionPane.showMessageDialog(null, "ID:" + alterausuario.getId_usuario() + " | " + "PERMISSAO SELECIONADA:" + alterausuario.getCod_permissao());

        try{
        Connection conexao;
        conexao = new Conexao().getConnection();

        UsuarioDAO usuarioDao = new UsuarioDAO(conexao);
        usuarioDao.updatePermissao(alterausuario);

            JOptionPane.showMessageDialog(null, "Permissão alterada com sucesso!");
        } catch (SQLException ex) {
             Logger.getLogger(FormCadastroView.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

No primeiro conjunto de JOptionPane eu retorno usuario com a id ainda e a permsisao tambem com o index do jcombobox

Agora quando entra o segundo conjunto de JOptionPane depois de ter instanciado o usuario os valores retornados são id = 0 e o select do jcombobox = null

solução!

Coloca um System.out.println(ex) dentro do catch.

Assim:


 JOptionPane.showMessageDialog(null, "Permissão alterada com sucesso!");
        } catch (SQLException ex) {
             System.out.println(ex);  // Imprime no console o stacktrace
             Logger.getLogger(FormCadastroView.class.getName()).log(Level.SEVERE, null, ex);
        }

Esse System.out vai imprimir a exceção no console, aí você copia e posta aqui. Blz?

Campeão, só te dando uma satisfação.

Eu relato o problema aqui e fico pesquisando na internet, as vezes acho, as vezes nao kkkk

Nesse caso eu achei. Encontrei uma aula no youtube que disponibilizava a aplicação da aula que tinha a solução pro meu problema.

De qualquer forma sou muito agradecido por tentar me ajudar, obrigado mesmo!