Eu criei uma consulta para ser exibida em uma JTable só que não estão sendo listados o registros que estão contidos no banco.
as classes são:
package db;
public class Constantes {
// mensagens de erro
public static final String ERRO_CONEXAO_DB = "Erro ao conectar-se ao banco de dados.";
public static final String ERRO_CLASSE_NAO_ENCONTRADA = "Erro ao encontrar a classe.";
public static final String ERRO_CONSULTA = "Erro na consulta.";
public static final String ERRO_UPDATE = "Erro na atualizacao do banco.";
public static final String ERRO_PADRAO = "Erro no sistema.";
public static final String ERRO_CLOSING_CONECTION = "Erro ao fechare a conexão com o banco.";
public static final String ERRO_CADASTRO = "Informe pelo menos o nome do novo contato.";
}
package db;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import java.util.Formatter;
public class ConnectionDB {
public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
public static final String URL_BANCO = "jdbc:mysql://localhost:3306/agendacontatosjava";
public static final String USUARIO = "root";
public static final String SENHA = "";
private Connection connection;
private Statement statement;
private ResultSetMetaData dados;
private int numLinhas;
private ResultSet resultado;
private Formatter formatter;
// construtor da classe de conexão com o banco
public ConnectionDB() {
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(URL_BANCO, USUARIO, SENHA);
statement = connection.createStatement();
} catch (SQLException sqlException) {
JOptionPane.showMessageDialog(null,
formatter.format("%s\nErro: %s", Constantes.ERRO_CONEXAO_DB, sqlException.getMessage()).toString(),
"Erro", JOptionPane.ERROR_MESSAGE);
System.exit(1);
} catch (ClassNotFoundException exception) {
JOptionPane.showMessageDialog(null, Constantes.ERRO_CLASSE_NAO_ENCONTRADA,
"Erro", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
} // fim do construtor da classe de conexão com o banco
// método hreslponsavel por fechar a conexâo com o banco de dados
public void closingConnection() {
try {
statement.close();
connection.close();
} catch (SQLException exception) {
JOptionPane.showMessageDialog(null, Constantes.ERRO_CLOSING_CONECTION,
"Erro", JOptionPane.ERROR_MESSAGE);
System.exit(1);
} finally {
statement = null;
connection = null;
}
} // fim do método que fecha a conexão com o banco de dados
// método que faz a consulta
public boolean query(String sql) {
try {
resultado = statement.executeQuery(sql);
dados = resultado.getMetaData();
resultado.last();
numLinhas = resultado.getRow();
return true;
} catch (SQLException exception) {
JOptionPane.showMessageDialog(null, Constantes.ERRO_CONSULTA +"\nError: "+ exception.getMessage());
}
return false;
} //fim do método que faz a
// método que faz a consulta
public boolean update(String sql) {
try {
statement.executeUpdate(sql);
return true;
} catch (SQLException exception) {
JOptionPane.showMessageDialog(null, Constantes.ERRO_UPDATE +"\nError: "+ exception.getMessage());
} finally {
closingConnection();
}
return false;
} //fim do método que faz a
// método que retorna os dados da query de busca
public ResultSetMetaData getDados() {
return dados;
} // fim do método getDados
// método que retorna o numero de linhas
public int getRow() {
return numLinhas;
} // fim do método getRow
// métodos que retorna os resultados
public ResultSet getResultados() {
return resultado;
} // fim do método getResultados
} // fim da classe ConnectionDB
package acoes;
import javax.swing.table.AbstractTableModel;
import java.util.ArrayList;
public class ModeloTabela extends AbstractTableModel {
private ArrayList lista = new ArrayList();
private String[] nomeColunas;
public ModeloTabela() {}
public void setNomeColunas(String[] nomes) {
nomeColunas = nomes;
}
@Override
public String getColumnName(int coluna) {
return nomeColunas[coluna];
}
public int getColumnCount() {
return nomeColunas.length;
}
public int getRowCount() {
return lista.size();
}
public Object getValueAt(int linha, int coluna) {
Fachada fachada = (Fachada) lista.get(linha);
return fachada.get(coluna);
}
public void setValueAt(Fachada valor) {
lista.add(valor);
fireTableDataChanged();
}
}
package acoes;
public class Fachada {
private String[] valores;
public Fachada() {}
public Fachada(String valor, int coluna) {
set(valor, coluna);
}
public void set(String valor, int coluna) {
valores[coluna] = valor;
}
public String get(int coluna) {
return valores[coluna];
}
}
package acoes;
import java.sql.ResultSetMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import db.ConnectionDB;
import db.Constantes;
import javax.swing.JTable;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class GerenciaContato {
private String nome = null;
private String email = null;
private String endereco = null;
private String telefone = null;
private String celular = null;
private ConnectionDB connectionDB;
private ResultSetMetaData dados;
private JTable tabela;
private JLabel textoResposta;
private ResultSet resultado;
// <editor-fold defaultstate="collapsed" desc="Método set's e get's">
public void setNome(String nome) {
this.nome = nome;
}
public void setEmail(String email) {
this.email = email;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public void setCelular(String celular) {
this.celular = celular;
}
public void setTabela(JTable tabela) {
this.tabela = tabela;
}
public String getNome() {
return nome;
}
public String getEmail() {
return email;
}
public String getEndereco() {
return endereco;
}
public String getTelefone() {
return telefone;
}
public String getCelular() {
return celular;
}
private JTable getTabela() {
return tabela;
}
// </editor-fold>
public GerenciaContato(JTable tabela, JLabel textoResposta) {
this.textoResposta = textoResposta;
setTabela(tabela);
busca();
}
private void limpaBuffer() {
nome = null;
email = null;
endereco = null;
telefone = null;
celular = null;
connectionDB = null;
dados = null;
resultado = null;
}
public void inseri() {
connectionDB = new ConnectionDB();
String sql = "INSERT INTO contatos " +
"(Nome, Email, Endereco, Telefone, Celular) VALUES " +
"('"+ nome +"', '"+ email +"', '"+ endereco +"', '"+ telefone +"', '"+ celular +"')";
connectionDB.update(sql);
limpaBuffer();
busca();
}
public void busca() {
boolean where = false;
String sql = "SELECT ID,Nome,Email,Endereco,Telefone,Celular FROM contatos ";
if(nome != null) {
sql += "WHERE Nome LIKE '%"+ nome +"%'";
where = true;
}
if(email != null) {
if(where)
sql += "WHERE ";
else
sql += " AND ";
sql += " Email LIKE '%"+ email +"%'";
where = true;
}
if(endereco != null) {
if(where)
sql += "WHERE ";
else
sql += " AND ";
sql += " Endereco LIKE '%"+ email +"%'";
where = true;
}
if(telefone != null) {
if(where)
sql += "WHERE ";
else
sql += " AND ";
sql += " Telefone LIKE '%"+ email +"%'";
where = true;
}
if(celular != null) {
if(where)
sql += "WHERE ";
else
sql += " AND ";
sql += " Celular LIKE '%"+ email +"%'";
where = true;
}
try {
connectionDB = new ConnectionDB();
connectionDB.query(sql);
dados = connectionDB.getDados();
resultado = connectionDB.getResultados();
} catch (Exception exception) {
JOptionPane.showMessageDialog(null, Constantes.ERRO_PADRAO,
"Erro", JOptionPane.ERROR_MESSAGE);
}
showTable();
} // fim do método de busca
// método que exibe os valores da pesquisa na JTable
private void showTable() {
try {
ModeloTabela modelo = new ModeloTabela();
Fachada fachada = new Fachada();
int numeroColunas = dados.getColumnCount();
if(numeroColunas > 0) {
while(resultado.next()) {
for(int count=0;count<numeroColunas;count++) {
fachada.set(resultado.getObject(count + 1).toString(), count);
}
modelo.setValueAt(fachada);
}
}
String[] campos = {"ID","Nome","Email","Endereco","Telefone","Celular"};
modelo.setNomeColunas(campos);
tabela.setModel(modelo);
} catch (SQLException exception) {
JOptionPane.showMessageDialog(null, Constantes.ERRO_PADRAO +"\nError: "+ exception.getMessage(),
"Erro", JOptionPane.ERROR_MESSAGE);
} finally {
connectionDB.closingConnection();
}
limpaBuffer();
} // fim do método showTable
}
se alguem poder me ajudar, o problema esta na classe GerenciaConatatos -> método showTable -> no while
[color=red]OBS: o compilador na acusa nenhum erro.[/color]