Ola,
Estou aprendendo a mostrar dados em uma jtable. Acontece que toda vezes que chamo o método para buscar os dados no meu banco ele trava nao mostra nenhum erro , e fica consumindo cada vez mais e mais memoria se eu nao finalizar a aplicação no gerenciador. Alguem me da um help ai. O metodo findAll() que esta travando esta na classe ComputadorDAO. Segue os códigos:
ComputadorDAO
package br.com.lenito.dao;
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 br.com.lenito.entity.Computador;
public class ComputadorDAO implements IComputador {
private static final String sqlInsert = "insert into maquina"
+ "(nome_maquina, ip_maquina, modelo_maquina, serial_number, id_marca, id_setor, usuario)"
+ "values (?,?,?,?,?,?,?)";
private static final String sqlUpdate = "update maquina"
+ "set nome_maquina = ?, ip_maquina = ?, modelo_maquina = ?, serial_number = ?, id_marca = ?, id_setor = ?, usuario = ?"
+ "where id_maquina = ?";
private static final String sqlRemove = "delete from maquina where id_maquina = ?";
private static final String sqlFindAll = "select * from maquina";
@Override
public int save(Computador computador) {
Connection conn = Conexao.getConnection();
PreparedStatement pstm = null;
int result = 0;
try {
pstm = conn.prepareStatement(sqlInsert);
pstm.setString(1, computador.getNome());
pstm.setString(2, computador.getIp());
pstm.setString(3, computador.getModelo());
pstm.setString(4, computador.getSerialNumber());
pstm.setInt(5, computador.getIdMarca());
pstm.setInt(6, computador.getIdSetor());
pstm.setString(7, computador.getUsuario());
result = pstm.executeUpdate();
} catch (SQLException e) {
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
Conexao.close(conn, pstm, null);
}
return result;
}
@Override
public int update(Computador computador) {
Connection conn = Conexao.getConnection();
PreparedStatement pstm = null;
int result = 0;
try {
pstm = conn.prepareStatement(sqlUpdate);
pstm.setString(1, computador.getNome());
pstm.setString(2, computador.getIp());
pstm.setString(3, computador.getModelo());
pstm.setString(4, computador.getSerialNumber());
pstm.setInt(5, computador.getIdMarca());
pstm.setInt(6, computador.getIdSetor());
pstm.setString(7, computador.getUsuario());
pstm.setInt(8, computador.getId());
result = pstm.executeUpdate();
} catch (SQLException e) {
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
Conexao.close(conn, pstm, null);
}
return result;
}
@Override
public int remove(int id) {
Connection conn = Conexao.getConnection();
PreparedStatement pstm = null;
int result = 0;
try {
pstm = conn.prepareStatement(sqlRemove);
pstm.setInt(1, id);
result = pstm.executeUpdate();
} catch (SQLException e) {
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
Conexao.close(conn, pstm, null);
}
return result;
}
@Override
public List<Computador> findAll() {
Connection conn = Conexao.getConnection();
PreparedStatement pstm = null;
ResultSet rs = null;
List<Computador> computadores = new ArrayList<Computador>();
try {
pstm = conn.prepareStatement(sqlFindAll);
rs = pstm.executeQuery();
while(rs.next()){
Computador computador = new Computador();
computador.setId(rs.getInt("id_maquina"));
computador.setNome(rs.getString("nome_maquina"));
computador.setIp(rs.getString("ip_maquina"));
computador.setIdSetor(rs.getInt("id_setor"));
computador.setId(rs.getInt("id_maquina"));
computador.setModelo(rs.getString("modelo_maquina"));
computador.setUsuario(rs.getString("usuario"));
computadores.add(computador);
}
} catch (SQLException e) {
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
Conexao.close(conn, pstm, rs);
}
return computadores;
}
}
Conexao
package br.com.lenito.dao;
import java.sql.*;
public class Conexao {
private static final String URL_MYSQL = "jdbc:mysql://localhost/inventario_intercam?useTimezone=true&serverTimezone=UTC";
private static final String DRIVER_CLASS_MYSQL = "com.mysql.cj.jdbc.Driver";
private static final String USER = "root";
private static final String PASS = "Lnt@478811901";
public static Connection getConnection() {
System.out.println("Conectando ao Banco de Dados");
try {
Class.forName(DRIVER_CLASS_MYSQL);
return DriverManager.getConnection(URL_MYSQL, USER, PASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return null;
}
public static void close(Connection conn, PreparedStatement stmt, ResultSet rs) {
try {
if (conn!= null) {
conn.close();
System.out.println("Conexão Fechado");
}
if (stmt!= null) {
stmt.close();
System.out.println("Statment Fechado");
}
if (rs!= null) {
rs.close();
System.out.println("RS Fechado");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
@SuppressWarnings({ "resource" })
public static void createTable() {
Connection connection = getConnection();
PreparedStatement stmt = null;
String sql = "CREATE TABLE IF NOT EXISTS setor (" +
" id_setor int NOT NULL AUTO_INCREMENT," +
" nome_setor VARCHAR(25) NOT NULL," +
" CONSTRAINT PK_SETOR PRIMARY KEY (id_setor)" +
");";
String sql2 = "CREATE TABLE IF NOT EXISTS marca (" +
" id_marca int NOT NULL AUTO_INCREMENT," +
" nome_marca VARCHAR(30) NOT NULL," +
" CONSTRAINT PK_MARCA PRIMARY KEY (id_marca)" +
");";
String sql3 = "CREATE TABLE IF NOT EXISTS maquina (" +
" id_maquina int NOT NULL AUTO_INCREMENT," +
" nome_maquina VARCHAR(15) NOT NULL," +
" ip_maquina VARCHAR(15) NOT NULL," +
" modelo_maquina VARCHAR(50) NOT NULL," +
" serial_number VARCHAR(50) NOT NULL," +
" id_marca int NOT NULL," +
" id_setor int NOT NULL," +
" usuario VARCHAR(20) NOT NULL," +
" CONSTRAINT PK_MAQUINA PRIMARY KEY (id_maquina)," +
" CONSTRAINT FK_SETOR FOREIGN KEY (id_setor) REFERENCES setor (id_setor)," +
" CONSTRAINT FK_MARCA FOREIGN KEY (id_marca) REFERENCES marca (id_marca)" +
");";
try {
//Criação da tabela setor
stmt = connection.prepareStatement(sql);
stmt.execute();
//Criação da tabela marca
stmt = connection.prepareStatement(sql2);
stmt.execute();
//Criação da tabela maquina
stmt = connection.prepareStatement(sql3);
stmt.execute();
System.out.println("Tabelas OK!");
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(connection, stmt, null);
}
}
}
A classe table model
package br.com.lenito.table;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import br.com.lenito.entity.Computador;
/**
* @author lenito.gama
*
*/
public class ComputadorTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private static final int col_id = 0;
private static final int col_nome = 1;
private static final int col_ip = 2;
private static final int col_modelo = 3;
private static final int col_serial = 4;
private static final int col_marca = 5;
private static final int col_setor = 6;
private static final int col_usuario = 7;
private List<Computador> valores;
public ComputadorTableModel(List<Computador> valores) {
this.valores = valores;
}
@Override
public int getRowCount() {
return valores.size();
}
@Override
public int getColumnCount() {
return 8;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Computador computador = valores.get(rowIndex);
if (columnIndex == col_id) {
return computador.getId();
} else if (columnIndex == col_nome) {
return computador.getNome();
} else if (columnIndex == col_ip) {
return computador.getIp();
} else if (columnIndex == col_modelo) {
return computador.getModelo();
} else if (columnIndex == col_serial) {
return computador.getSerialNumber();
} else if (columnIndex == col_marca) {
return computador.getIdMarca();
} else if (columnIndex == col_setor) {
return computador.getIdSetor();
} else if (columnIndex == col_usuario) {
return computador.getUsuario();
}
return null;
}
@Override
public String getColumnName(int column) {
String coluna = "";
switch (column) {
case col_id:
coluna = "Código";
break;
case col_nome:
coluna = "Nome";
break;
case col_ip:
coluna = "IP";
break;
case col_modelo:
coluna = "Modelo";
break;
case col_serial:
coluna = "Serial Number";
break;
case col_setor:
coluna = "Setor";
break;
case col_marca:
coluna = "Marca";
break;
case col_usuario:
coluna = "Usuário";
break;
default:
throw new IllegalArgumentException("Coluna inválida!");
}
return coluna;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if(columnIndex == col_id){
return int.class;
} else if(columnIndex == col_nome){
return String.class;
} else if(columnIndex == col_ip){
return String.class;
} else if(columnIndex == col_modelo){
return String.class;
} else if(columnIndex == col_serial){
return String.class;
} else if(columnIndex == col_setor){
return int.class;
} else if(columnIndex == col_ip){
return String.class;
} else if(columnIndex == col_marca){
return int.class;
} else if(columnIndex == col_usuario){
return String.class;
}
return null;
}
public Computador get(int row){
return valores.get(row);
}
}
E aqui o form se caso precisar, o metodo refreshtable que acaba no find all
package br.com.lenito.view;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import br.com.lenito.controller.ComputadorController;
import br.com.lenito.entity.Computador;
import br.com.lenito.table.ComputadorTableModel;
import net.miginfocom.swing.MigLayout;
public class ComputadorForm extends JFrame{
//Criação das variáveis
private static final long serialVersionUID = 1L;
private JLabel lbIp, lbUsuario, lbMarca, lbSetor, lbModelo, lbSerial, lbNome;
private JTextField txtIp, txtUsuario, txtMarca, txtSetor, txtModelo, txtSerial, txtNome;
private JPanel panelAdd, panelTable, panelButtons;
private JButton btnNew, btnSave, btnRemove, btnUpdate, btnCancel;
private JTable table;
private JScrollPane scrollPane;
private List<Computador> computadorList;
private int idComputador = 0;
//Criação do construtor
public ComputadorForm() {
super("Cadastro de Computadores");
setContentPane(new JPanel());
setLayout(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Criação do painel Add
panelAdd = new JPanel(new MigLayout());
panelAdd.setBorder(BorderFactory.createTitledBorder("Adicionar Computador"));
panelAdd.setBounds(5, 0, 480, 200);
//Criação dos labels
lbIp = new JLabel("IP");
lbMarca = new JLabel("Marca");
lbModelo = new JLabel("Modelo");
lbNome = new JLabel("Nome");
lbSerial = new JLabel("Serial N.");
lbSetor = new JLabel("Setor");
lbUsuario = new JLabel("Usuário");
//Criação dos txts
txtIp = new JTextField(14);
txtMarca = new JTextField(30);
txtModelo = new JTextField(30);
txtNome = new JTextField(50);
txtSerial = new JTextField(50);
txtSetor = new JTextField(2);;
txtUsuario = new JTextField(2);
//Adicionando os txts e os labels no painel
panelAdd.add(lbIp);
panelAdd.add(txtIp,"span, growx");
panelAdd.add(lbMarca);
panelAdd.add(txtMarca,"span, growx");
panelAdd.add(lbModelo);
panelAdd.add(txtModelo,"span, growx");
panelAdd.add(lbNome);
panelAdd.add(txtNome,"span, growx");
panelAdd.add(lbSerial);
panelAdd.add(txtSerial,"span, growx");
panelAdd.add(lbSetor);
panelAdd.add(txtSetor,"span, growx");
panelAdd.add(lbUsuario);
panelAdd.add(txtUsuario,"span, growx");
//Criação do painel dos botões
panelButtons = new JPanel(new MigLayout());
panelButtons.setBorder(BorderFactory.createEtchedBorder());
panelButtons.setBounds(5, 205, 480, 40);
//Criação dos botões
ClassLoader loader = getClass().getClassLoader(); //Dando acesso para carregar as imagens dos botoes
btnNew = new JButton(new ImageIcon(loader.getResource("img/new.png")));
btnSave = new JButton(new ImageIcon(loader.getResource("img/save.png")));
btnCancel = new JButton(new ImageIcon(loader.getResource("img/cancel.png")));
btnRemove = new JButton(new ImageIcon(loader.getResource("img/trash.png")));
btnUpdate = new JButton(new ImageIcon(loader.getResource("img/edit.png")));
//Incluindo os botões no painel
panelButtons.add(btnNew, "gapleft 90");
panelButtons.add(btnCancel);
panelButtons.add(btnSave, "gap unrelated");
panelButtons.add(btnUpdate, "gap unrelated");
panelButtons.add(btnRemove);
//Criação do painel da tabela
panelTable = new JPanel(new MigLayout());
panelTable.setBorder(BorderFactory.createTitledBorder("Lista de Computadores"));
panelTable.setBounds(5, 250, 480, 240);
//Criação da tabela
table = new JTable();
//Criação da barra de rolagem da tabela
scrollPane = new JScrollPane(table);
//Adicionando a tabela no painel de tabela
panelTable.add(scrollPane);
//Atualizar a lista
//refreshTable();
//Adicionando os paineis no form
add(panelAdd);
add(panelButtons);
add(panelTable);
//Setando configurações do form
setMinimumSize(new Dimension(500, 520));
setVisible(true);
btnSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
onSaveComputador();
}
});
}
private void onSaveComputador() {
Computador computador = new Computador();
if(txtIp.getText().length() > 0 && txtModelo.getText().length() > 0 && txtNome.getText().length() > 0 && txtMarca.getText().length() > 0 && txtSerial.getText().length() > 0 && txtSetor.getText().length() > 0 && txtUsuario.getText().length() > 0){
computador.setIdMarca(Integer.parseInt(txtMarca.getText()));
computador.setIdSetor(Integer.parseInt(txtSetor.getText()));
computador.setIp(txtIp.getText());
computador.setModelo(txtModelo.getText());
computador.setNome(txtNome.getText());
computador.setUsuario(txtUsuario.getText());
computador.setSerialNumber(txtSerial.getText());
} else{
JOptionPane.showMessageDialog(this,"Todos os campos devem serem preenchidos!");
return;
}
int result = 0;
if(idComputador == 0){
result = new ComputadorController().addComputador(computador);
} else{
computador.setId(idComputador);
result = new ComputadorController().alterarComputador(computador);
idComputador = 0;
}
if(result == 1){
JOptionPane.showMessageDialog(this, "Valor inserido com sucesso!");
//refreshTable();
} else{
JOptionPane.showMessageDialog(this, "Tente Novamente!");
}
}
private void refreshTable(){
computadorList = new ComputadorController().findComputadores();
if (computadorList != null){
table.setModel(new ComputadorTableModel(computadorList));
}
}
}