Após carregar TextFields com valores do banco CRUD não funciona

Antes de fazer os campos receberem o valor do BD, as operações de CRUD funcionavam, no fim colarei o erro, segue mas classes e o BD:

Classe do tipo Modelo:
package com.login.model;

public class ModelUser {

private int id;

private String nome;

private String login;

private String senha;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getLogin() {
    return login;
}

public void setLogin(String login) {
    this.login = login;
}

public String getSenha() {
    return senha;
}

public void setSenha(String senha) {
    this.senha = senha;
}

@Override
public String toString() {
    return "ModelUser{" + "id=" + id + ", nome=" + nome + ", login=" + login + ", senha=" + senha + '}';
}

}

############################################
Interface Dao:
package com.login.dao;

import com.login.model.ModelUser;
import java.util.List;

public interface InterfaceDaoUser {

public void novo(ModelUser modelUser);

public void excluir(ModelUser modelUser);

public void alterar(ModelUser modelUser);

public List<ModelUser> read();

public  String getSqlCliente();

}

###################################
Dao

package com.login.dao;

import com.login.model.ModelUser;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

public class DaoUser implements InterfaceDaoUser {

public void novo(ModelUser modelUser) {
    Connection con = ConnectionFactory.getConnnection();
    PreparedStatement stmt = null;

    String sql = "INSERT INTO tbl_login (nome, login, senha) VALUES (?, ?, ?) ";

    try {
        stmt = con.prepareStatement(sql);

        stmt.setString(1, modelUser.getNome());
        stmt.setString(2, modelUser.getLogin());
        stmt.setString(3, modelUser.getSenha());

        stmt.executeUpdate();
        JOptionPane.showMessageDialog(null, "Salvo com sucesso!");
        con.close();

    } catch (SQLException u) {
        throw new RuntimeException(u);
    } finally {
        ConnectionFactory.closeConnection(con, stmt);
    }
}//fim inserir

public void excluir(ModelUser modelUser) {
    Connection con = ConnectionFactory.getConnnection();
    PreparedStatement stmt = null;
    String sql = "DELETE FROM  tbl_login WHERE id=?";

    try {

        stmt = con.prepareStatement(sql);
        stmt.setInt(1, modelUser.getId());
        stmt.executeUpdate();
        JOptionPane.showMessageDialog(null, "Excluido com sucesso!");
        con.close();
    } catch (SQLException u) {
        throw new RuntimeException(u);
    }

}// fim excluir

public void alterar(ModelUser modelUser) {
    Connection con = ConnectionFactory.getConnnection();
    PreparedStatement stmt = null;
    String sql = "UPDATE tbl_login SET nome=?, login=?, senha=? WHERE id=? ";

    try {

        stmt = con.prepareStatement(sql);
        stmt.setString(1, modelUser.getNome());
        stmt.setString(2, modelUser.getLogin());
        stmt.setString(3, modelUser.getSenha());
        stmt.setInt(4, modelUser.getId());
        stmt.executeUpdate();
        JOptionPane.showMessageDialog(null, "Excluido com sucesso!");
        con.close();

    } catch (SQLException u) {
        throw new RuntimeException(u);
    } finally {
        ConnectionFactory.closeConnection(con, stmt);
    }
}//fim alterar


public List<ModelUser> read() {
    Connection con = ConnectionFactory.getConnnection();

    PreparedStatement stmt = null;

    ResultSet rs = null;

    List<ModelUser> modelUsers = new ArrayList<>();

    try {
        stmt = con.prepareStatement("SELECT * FROM tbl_login");
        rs = stmt.executeQuery();

        while (rs.next()) {
            ModelUser mUser = new ModelUser();

            mUser.setId(rs.getInt("id"));
            mUser.setNome(rs.getString("nome"));
            mUser.setLogin(rs.getString("login"));
            mUser.setSenha(rs.getString("senha"));

            modelUsers.add(mUser);

        }
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao ler lista\nErro :" + ex);
    } finally {                  
         ConnectionFactory.closeConnection(con, stmt, rs);
    }
    return modelUsers;
}// end read


public  String getSqlCliente(){
    
    return "SELECT * FROM tbl_login ";
}

}//end DaoUser

#########################################
Conexão
package com.login.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionFactory {

    private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/db_login";
private static final String USER = "root";
private static final String PASS = "123";
    
   

public static Connection getConnnection(){
    
    try {
        Class.forName(DRIVER);
        return DriverManager.getConnection(URL, USER, PASS);
        
    } catch (ClassNotFoundException | SQLException ex) {
        throw new RuntimeException("Erro na conexao: ",ex );
    }
}



public static void closeConnection(Connection con){
    
        try {
            if(con !=null){
            con.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
        }
    
}

public static void closeConnection(Connection con, PreparedStatement stmt){
        closeConnection(con);
        try {
            if(stmt!=null){
            stmt.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
        }
}   
public static void closeConnection(Connection con, PreparedStatement stmt, ResultSet rs){
        closeConnection(con, stmt);
        try {
            if(rs!=null){
            rs.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
        }        
        
}

}

####################################
Controle

package com.login.control;

import com.login.dao.DaoUser;
import com.login.dao.InterfaceDaoUser;
import com.login.model.ModelUser;
import java.util.List;
import javax.swing.JOptionPane;

public class ControlUser {
private DaoUser dao;
private InterfaceDaoUser interfaceDaoUser;

public ControlUser(){
	this.interfaceDaoUser=new DaoUser();
}

public void novo(ModelUser modelUser){
	if(modelUser !=null && !modelUser.getNome().equals("") && !modelUser.getLogin().equals("")  && !modelUser.getSenha().equals("")){
		interfaceDaoUser.novo(modelUser);
		JOptionPane.showMessageDialog(null, "Cadastro CONCLUIDO com sucesso!");
	}else{
		JOptionPane.showMessageDialog(null, "Todos os campos sao necessários!");
	}
}

public void alterar(ModelUser modelUser){
	if(modelUser != null && modelUser.getId()>0){
		interfaceDaoUser.excluir(modelUser);
		JOptionPane.showMessageDialog(null, "Cadastro EXCLUIDO com sucesso!");
	}else{
		JOptionPane.showMessageDialog(null, "Informe um cadastro a ser EXCLUIDO!");
	}
}



public List<ModelUser> read(){
	return interfaceDaoUser.read();
}

}

######################################

Visão

public class FRMConsoleUser extends javax.swing.JFrame {

InterfaceDaoUser interfaceDaoUser;
DaoUser daoUser = new DaoUser();
ModelUser modelUser = new ModelUser();
int login_id;

/**
 * Creates new form FRMConsoleUser
 */
public FRMConsoleUser() {
    initComponents();
    DefaultTableModel modelo = (DefaultTableModel) jTableLogin.getModel();
    jTableLogin.setRowSorter(new TableRowSorter(modelo));
    //https://www.youtube.com/watch?v=W5LsoFlwAWE&list=PLWd_VnthxxLfeEUK08gB7G3316OS5xIT3&index=14
    readJTable();
}

public void readJTable() {
    DefaultTableModel modelo = (DefaultTableModel) jTableLogin.getModel();

    modelo.setNumRows(0);

    DaoUser du = new DaoUser();

    for (ModelUser tmp : du.read()) {

        modelo.addRow(new Object[]{
            tmp.getId(),
            tmp.getNome(),
            tmp.getLogin(),
            tmp.getSenha()

        });
    }

}

private void jButtonNovoActionPerformed(java.awt.event.ActionEvent evt) {
modelUser = new ModelUser();

    modelUser.setNome(jTextFieldNome.getText());
    modelUser.setLogin(jTextFieldLogin.getText());
    modelUser.setSenha(jTextFieldSenha.getText());

//
//daoUser.novo(modelUser);
interfaceDaoUser.novo(modelUser);

}                   

private void jButtonAlterarActionPerformed(java.awt.event.ActionEvent evt) {
modelUser = new ModelUser();

    modelUser.setId(login_id);
    System.out.println("login_id = "+login_id);
    modelUser.setNome(jTextFieldNome.getText());
    modelUser.setLogin(jTextFieldLogin.getText());
    modelUser.setSenha(jTextFieldSenha.getText());
     
    
    
 
    interfaceDaoUser.alterar(modelUser);
}                                     

private void jButtonExcluirActionPerformed(java.awt.event.ActionEvent evt) {
modelUser = new ModelUser();
modelUser.setId(login_id);
System.out.println("login_id = "+login_id);
interfaceDaoUser.excluir(modelUser);
carregarDados(“SELECT * FROM tbl_login”);
}

private void jTableLoginMouseClicked(java.awt.event.MouseEvent evt) {
//String nome = jTableLogin.getValueAt(jTableLogin.getSelectedRow(), 1).toString();
login_id =Integer.parseInt(jTableLogin.getValueAt(jTableLogin.getSelectedRow(), 0).toString());
carregarDados(“SELECT * FROM tbl_login WHERE tbl_login.id=’” + login_id + "’ ");
}

private void jButtonLimparActionPerformed(java.awt.event.ActionEvent evt) {
jTextFieldId.setText("");
jTextFieldNome.setText("");
jTextFieldLogin.setText("");
jTextFieldSenha.setText("");
}

// Ao clicar no item da Tabela ele carrega no campos jtextField…
private void carregarDados(String sql) {
try {
Connection con = ConnectionFactory.getConnnection();

        PreparedStatement stmt = null;

        ResultSet rs = null;
       
        stmt = con.prepareStatement(sql);
        rs = stmt.executeQuery();
        while (rs.next()) {                      
            
            jTextFieldId.setText(String.valueOf(rs.getInt("id")));
            jTextFieldNome.setText(rs.getString("nome"));
            jTextFieldLogin.setText(rs.getString("login"));
            jTextFieldSenha.setText(rs.getString("senha"));                
            
        }
        
        con.close();
        rs.close();
        stmt.close();
        
    } catch (Exception e) {
        e.getMessage();
    }

}

############################################
Banco

DROP DATABASE db_login;
CREATE DATABASE db_login;
USE db_login;


CREATE TABLE tbl_login(
id INT( 20 ) AUTO_INCREMENT,        
nome VARCHAR(255),
login VARCHAR(255),
senha VARCHAR(255),
PRIMARY KEY (id)
);

INSERT INTO tbl_login (nome, login, senha) VALUES ('marcel', 'adm_marcel','123');
INSERT INTO tbl_login (nome, login, senha) VALUES ('ab', 'adm_ab','123');
INSERT INTO tbl_login (nome, login, senha) VALUES ('treino', 'adm_treino','123');

DROP TABLE tbl_login;

SELECT * FROM tbl_login;

#########################
Erro ao clicar Excluir (notar que login_id assume o valor do campo clicado)

login_id = 3
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at com.login.view.FRMConsoleUser.jButtonExcluirActionPerformed(FRMConsoleUser.java:301)
	at com.login.view.FRMConsoleUser.access$500(FRMConsoleUser.java:14)
	at com.login.view.FRMConsoleUser$6.actionPerformed(FRMConsoleUser.java:139)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6516)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6281)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4872)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4698)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4698)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
	at java.awt.EventQueue.access$300(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:706)
	at java.awt.EventQueue$3.run(EventQueue.java:704)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:720)
	at java.awt.EventQueue$4.run(EventQueue.java:718)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

O quem tem na linha 301 do FRMConsoleUser?
interfaceDaoUser deve estar nula

Ola Marcel_Motta, Tudo bem?
Acredito que o erro seria com a variavel “interfaceDaoUser” na class FRMConsoleUser que não foi iniciado. Pode-se observar que daria erro nas outras funções que se utiliza essa variavel.

Vc pode iniciala no contrutor.
como abaixo:

public class FRMConsoleUser extends javax.swing.JFrame {
   InterfaceDaoUser interfaceDaoUser;
   public FRMConsoleUser(){
       interfaceDaoUser = new DaoUser();
   }
}

Algumas Observações:
1-Vi que vc criou um controle “ControlUser”. Ao invez de usar diretamente o InterfaceDaoUser vc não deveria utilizar o ControlUser que tem as regras de negocio.

2-A utilização do DefaultTableModel para essa situação não e uma boa!
O ideal seria vc criar seu proprio tablemodel que engrobasse as funções de crud.
Aqui vc vai entender o q eu quero dizer:
Video 1: https://www.youtube.com/watch?v=rMafP3EvckM&t=1s
Video 2: https://www.youtube.com/watch?v=Az5H-YdBsrc
No primeiro video eu mostro o poder do TableModel e da arquitetura MVC.
No Segundo comento o codigo fonte.

1 curtida

Obrigado pessoal