Consulta não lista os dados do banco

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]

Olá, você já deu um print na variável sql para ver se a query está certa?

Já e ja fiz a mesma query no proprio mysql, e ele da erro até na query

eu olhei no debug no netbeans e ele retorna os dados, mas quando eu faço o while o resultado.next() retorna false;
e não executa o que esta dentro do while, e no meu banco existem 6 registros.

resultset.last() muda para resultset.first()

valeu funciono

Diego não entendi muito bem, você rodou a query no mysql e deu erro?

a query funciono sim, o problema era passar o valor do resultset para o inicio dos dados, por eu tinha colocado ele no final.

mas valeu pela ajuda.

mas uma coisa, a JTable produz eventos ActionListener