Bom dia, pessoal. Este é meu primeiro tópico, uma vez que nunca precisei chegar a esse ponto, e sempre encontrei a solução para os meus problemas em outros tópicos aqui do fórum, mas dessa vez estou empacado mesmo.
Estou desenvolvendo um sistema no qual preciso adicionar uma lista de registros de um banco de dados a um table model, e para isso estou utilizando o MySQL. Eu pesquiser muito sobre Default e AbstractTableModel, pois nunca tinha utilizado nenhum dos dois, logo descobri que a Abstract é muito mais viável, porém estou com dificuldade de implementá-la.
Segue abaixo as classes que fazem parte desse problema:
Classe de conexão com o BD:
[code]package connection;
import java.sql.*;
public class ConnectionFactory {
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/magic";
private static final String USER = "root";
private static final String PASS = "140596";
public static Connection getConnection(){
try {
Class.forName(DRIVER);
return DriverManager.getConnection(URL, USER, PASS);
} catch (ClassNotFoundException | SQLException ex) {
throw new RuntimeException("Erro na conexão.", ex);
}
}
public static void closeConnection(Connection con){
if(con != null){
try {
con.close();
} catch (SQLException ex) {
System.err.println("Erro: "+ex);
}
}
}
public static void closeConnection(Connection con, PreparedStatement stmt){
if(stmt != null){
try {
stmt.close();
} catch (SQLException ex) {
System.err.println("Erro: "+ex);
}
}
closeConnection(con);
}
public static void closeConnection(Connection con, PreparedStatement stmt, ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException ex) {
System.err.println("Erro: "+ex);
}
}
closeConnection(con, stmt);
}
}[/code]
Não vou postar a Classe Carta, pois ela simplesmente está com os atributos e os setters e getters implementados.
Classe CartaDAO:
[code]public class CartaDAO {
private Connection con = null;
public CartaDAO(){
con = ConnectionFactory.getConnection();
}
public List<Carta> findAll(){
String sql = "select * from vw_chamartodas";
PreparedStatement stmt = null;
ResultSet rs = null;
List<Carta> carta = new ArrayList();
try {
stmt = con.prepareStatement(sql);
rs = stmt.executeQuery();
while(rs.next()){
Carta cartalista = new Carta(); //cartalista nao pode ter o mesmo nome que a declaracao na linha 37
cartalista.setNome(rs.getString("nome"));
cartalista.setTipo(rs.getString("tipo"));
cartalista.setAtaque(rs.getInt("ataque"));
cartalista.setVida(rs.getInt("vida"));
carta.add(cartalista);
}
} catch (SQLException ex) {
System.err.println("Erro: "+ex);
}finally{
ConnectionFactory.closeConnection(con, stmt, rs);
}
return carta;
}
}
[/code]
É na classe CartaDAO que estou gerando minha lista, e ao testá-la no JUnit, funcionou normalmente, porém ao criar a classe do table model, e chamá-la na aplicação, a tabela fica vazia ao executar o sistema:
Classe AbstractTableModel:
[code]public class CartaTableModel extends AbstractTableModel {
private CartaDAO ex = new CartaDAO();
private String[] colunas = {"Nome","Tipo","Vida","Ataque"};
@Override
public String getColumnName(int column){
return colunas[column];
}
@Override
public int getRowCount() {
return ex.findAll().size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Object getValueAt(int linha, int coluna) {
switch(coluna){
case 0:
return ex.findAll().get(linha).getNome();
case 1:
return ex.findAll().get(linha).getTipo();
case 2:
return ex.findAll().get(linha).getVida();
case 3:
return ex.findAll().get(linha).getAtaque();
}
return null;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
}
[/code]
Por fim, a aplicação:
[code]public class TelaColecaoDeckTroca extends javax.swing.JFrame {
CartaTableModel tableModel = new CartaTableModel();
public TelaColecaoDeckTroca() {
initComponents();
jTCarta.setModel(tableModel);
}
[/code]
Alguém poderia me ajudar? Imagino e tenho quase certeza que o erro está na classe da AbstractTableModel e na aplicação, infelizmente não consigo mais dar continuidade.
Obrigado!