Como criar AbstractTableModel e interligar com o Mysql

Pessoal, estou tentando criar um programa de cadastro com o banco de dados Mysql, to usando o Assistente SWING do netbeans para fazer a tabela padrão, e implementando classes para ficar com o modelo AbstractTableModel, mas eu não sei como ligar ela ao meu banco de dados, eu to ficando louco ja com essa desgraça

Codigo

public class ModeloTabela extends AbstractTableModel {
	private static final String DRIVER = "com.mysql.jdbc.Driver";
	private static final String USUARIO = "root";
	private static final String SENHA = "";
	private static final String URL = "jdbc:mysql://localhost:3306/cadastro";
	
	private static Connection pegarConexao() throws Exception {
		Class.forName(DRIVER);
		Connection con = DriverManager.getConnection(URL, USUARIO, SENHA);
		return con;
	}
	
	private String[] colunas = {"Usuario", "Senha", "ID"};
	private ArrayList<Cadastro> dados = new ArrayList<>();
	
	//Show de bola
	public ArrayList<Cadastro> contatosLista() {
		try {
			Connection con = pegarConexao();
			String sql = "SELECT * FROM information";
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			Cadastro c1;
			
			while(rs.next()) {
				c1 = new Cadastro(rs.getString("user"), rs.getString("pass"), rs.getInt("id"));
				dados.add(c1);
			}
		} catch(Exception ex) {
			System.err.println("Error: " + ex);
		}
		
		return dados;
	}
	
	public String getColumnName(int column) {
		return colunas[column];
	}
	
	public int getRowCount() {
		return dados.size();
	}
	
	public int getColumnCount() {
		return colunas.length;
	}
	
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
	}
	
	public void addRow() {
		Cadastro c1 = new Cadastro();    
		ArrayList<Cadastro> lista = contatosLista();
		Object[] role = new Object [6];
		
		for (int i = 0; i < lista.size(); i++) {
			role[0] = lista.get(i).getUsuario();
			role[1] = lista.get(i).getSenha();
			role[2] = lista.get(i).getId();
			this.dados.add(c1);
		}
	}
}

Veja esse exemplo que montei:

No método getPessoas, vc iria realizar a consulta que retornará os dados que serão apresentados na tabela (no exemplo, eu tratei como Pessoa, mas vc altera para apresentar a entidade que vc quiser)

Janela

import java.awt.Dimension;
import java.awt.HeadlessException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class MainFrame extends JFrame {
    private static final long serialVersionUID = 1L;

    public MainFrame() throws HeadlessException {
        super("Minha Janela");
        
        initComponents();
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        pack();
        setVisible(true);
    }
    
    private void initComponents() {
        JTable table = new JTable();
        table.setModel(new PessoaTableModel(getPessoas()));
        
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setPreferredSize(new Dimension(300, 200));
        
        add(scrollPane);
    }
    
    private List<Pessoa> getPessoas() {
        List<Pessoa> pessoas = new ArrayList<>();
        pessoas.add(new Pessoa(1, "Aaa"));
        pessoas.add(new Pessoa(2, "Bbb"));
        pessoas.add(new Pessoa(3, "Ccc"));
        pessoas.add(new Pessoa(4, "Ddd"));
        return pessoas;
    }

    public static void main(String[] args) {
        new MainFrame();
    }
}

PessoaTableModel

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

public class PessoaTableModel extends AbstractTableModel {
    private static final long serialVersionUID = 1L;
    private List<Pessoa> data = new ArrayList<>();
    
    private String[] colunas = new String[] {"ID", "NOME"};
    
    public PessoaTableModel(List<Pessoa> data) {
        super();
        this.data = data;
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }
    
    @Override
    public String getColumnName(int column) {
        return colunas[column];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Pessoa value = data.get(rowIndex);
        
        if(value == null) {
            return null;
        }
        
        switch (columnIndex) {
            case 0: return value.getId();
            case 1: return value.getNome();
            default: return null;
        }
    }
}

Pessoa

public class Pessoa {
    private Integer id;
    private String nome;

    public Pessoa(Integer id, String nome) {
        super();
        this.id = id;
        this.nome = nome;
    }

    public final Integer getId() {
        return id;
    }

    public final String getNome() {
        return nome;
    }

    public String toString() {
        return "Pessoa [id=" + id + ", nome=" + nome + "]";
    }
}

Mano ate ai beleza, eu conseguia fazer ja, mas como eu faço a conexão com o banco de dados nessa tabela??

Bah esquece ja consegui aqui :stuck_out_tongue:
Obrigado pela ajuda!!

Como tu fez?

private List getCadastros() {
List pessoas = new ArrayList<>();
try{
Connection con = pegarConexao();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
pessoas.add(new Cadastro(rs.getString(“user”),rs.getString(“pass”),rs.getInt(“id”)));
}
}catch(Exception ex){
JOptionPane.showMessageDialog(null,“Deu merda”);
}
return pessoas;
}

Eu so modifiquei um pouco seu codigo, dai em vez de adicionar as linhas manualmente no codigo, ele vai usar o ResultSet para listar os dados que ja tinha no meu banco…

1 curtida