Como mostrar dados de uma consulta no BD numa JTable

public class AgendaTableModel extends AbstractTableModel {
	private static final long serialVersionUID = 1L;
	// LISTA DE CONTATOS A SEREM EXIBIDOS NA TELA
    private List<Contato> linhas = new ArrayList<Contato>();
    // CRIA UMA AGENDATABLEMODEL SEM NENHUMA LINHA
    public AgendaTableModel() {
    	// NO CONSTRUTOR, INSTANCIAMOS A LISTA
        linhas = new ArrayList<Contato>();
    }
    // CRIA UMA AGENDATABLE MODEL CONTENDO A LISTA RECEBIDA POR PARAMETRO   
    public AgendaTableModel(List<Contato> listaDeContatos) {
        linhas = new ArrayList<Contato>(listaDeContatos);
    }
    // ARRAY COM TODAS AS COLUNAS  
    private String[] colunas = new String[] {"Nome", "Email","Dt. Nasc", "Sexo","Estado Civil",
    		"Rua", "Número", "Cidade","Complemento" ,"Estado", "fone", "fone"," fone" };
 
    private static final int NOME = 0;
    private static final int EMAIL = 1;
    private static final int DATANASCIMENTO = 2;
    private static final int SEXO =3;
    private static final int ESTADOCIVIL = 4;
    private static final int RUA = 5 ;
    private static final int NUMERO = 6;
    private static final int CIDADE = 7;
    private static final int COMPLEMENTO = 8;
    private static final int ESTADO = 9;
    private static final int TELEFONE = 10;
    private static final int TELEFONE1 = 11;
    private static final int TELEFONE2 = 12;
    // RETORNA O NUMERO DE LINHAS
    public int getRowCount() {
        return linhas.size();
    }
    // RETORNA O NUMERO DE COLUNAS
    public int getColumnCount() {
        return colunas.length;
    }
    // ARRAY COM NOME DAS COLUNAS PARA RETORNAR O NOME REFERENTE AO INDICE PASSADO POR PARAMETRO
    public String getColumnName(int columnIndex) {
        return colunas[columnIndex];
    };
    // VERIFICA O TIPO DE CLASSE PASSADO POR PARAMETRO
    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
        case NOME:
            return String.class;
        case EMAIL:
            return String.class;
        case DATANASCIMENTO:
        	return Date.class;
        case SEXO:
        	return String.class;
        case ESTADOCIVIL:
        	return String.class;
        case RUA:
            return String.class;
        case CIDADE:
            return String.class;
        case COMPLEMENTO:
            return String.class;
        case ESTADO:
            return String.class;
        case NUMERO:
            return int.class;
        case TELEFONE:
            return String.class;
        case TELEFONE1:
            return String.class;
        case TELEFONE2:
        	return String.class;
        
        default:
            throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }
    
    public boolean isCellEditable(int rowIndex, int columnIndex) {
    	// RETORNA AS COLUNAS EDITAVÉIS, NESSE CASO TODAS
        return true;
    }
    
    public Object getValueAt(int rowIndex, int columnIndex) {
        // AKI VAMOS ATUALIZAR OS DADOS DO NOSSO CONTATO
    	// EM QUAL LINHA ESTÁ
        Contato c = linhas.get(rowIndex);
     // E VEMOS O QUE SERÁ ATUALIZADO
        switch (columnIndex) {
        // CASOS PARA EFETUAR AS MUDANÇAS
        case NOME:
            return c.getNome();
        case EMAIL:
            return c.getEmail();
        case DATANASCIMENTO:
        	return c.getDtNas();
        case SEXO:
        	return c.getSexo();
        case ESTADOCIVIL:
        	return c.getEstadoCivil();
        case RUA:
            return c.getRua();
        case CIDADE:
            return c.getCidade();
        case COMPLEMENTO:
            return c.getComplemento();
        case ESTADO:
            return c.getEstado();
        case NUMERO:
            return c.getNumero();
        case TELEFONE:
            return c.getTelefone();
        case TELEFONE1:
            return c.getTelefone1();
        case TELEFONE2:
        	return c.getTelefone2();
    
            default:
            throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }
    // RETORNA O VALOR DA CELULA ESPECIFICADA
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        
        Contato c = linhas.get(rowIndex);
     
        switch (columnIndex) {
        case NOME:
             c.setNome((String) aValue);
            break;
        case EMAIL:
            c.setEmail((String) aValue);
            break;
        case SEXO:
            c.setSexo((String) aValue);
            break;
        case ESTADOCIVIL:
            c.setEstadoCivil((String) aValue);
            break;
        case CIDADE:
            c.setCidade((String) aValue);
            break;
        case COMPLEMENTO:
            c.setComplemento((String) aValue);
            break;
        case ESTADO:
            c.setEstado((String) aValue);
            break;
        case RUA:
            c.setRua((String) aValue);
            break;
        case NUMERO:
            c.setNumero((String) aValue);
            break;
        case TELEFONE:
            c.setTelefone((String) aValue);
            break;
        case TELEFONE1:
            c.setTelefone1((String) aValue);
            break;
        case TELEFONE2:
            c.setTelefone2((String) aValue);
            break;
        default:
            throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
        // NOTIFICA O ATUAL 
        fireTableCellUpdated(rowIndex, columnIndex); 
    }
    // RETORNA O CONTATO REFERENTE A LINHA ESPECIFICADA
    public Contato getContato(int indiceLinha) {
        return linhas.get(indiceLinha);
    }
     // ADICIONA CONTATO ESPECIFICADO AO MODELO   
    public void addContato(Contato c) {
       // ADICIONA REGISTRO
        linhas.add(c);
        // PEGA A QUANTIDADE DE REGISTROS E SUBTRAI 1 PARA ACHAR O ÚLTIMO INDICE.
        // A SUBTRAÇÃO E NECESSARIA PORQUE OS INDICES COMEÇAM DO ZERO
        int ultimoIndice = getRowCount() - 1;
    // NOTIFICA AS MUDANÇAS
        fireTableRowsInserted(ultimoIndice, ultimoIndice);
    }
     // REMOVE O CONTATO NA LINHA ESPECIFICADA
    public void removeContato(int indiceLinha) {
      // REMOVE REGISTRO
        linhas.remove(indiceLinha);
        // NOTIFICA MUDANÇA
        fireTableRowsDeleted(indiceLinha, indiceLinha);
    }
     // ADICIONA UMA LISTA DE CONTATOS NO FINAL DA LISTA
    public void addListaDeContatos(List<Contato> c) {
    	// PEGA O TAMANHO ANTINGO DA TABELA, QUE SERVIRÁ COMO INDICE PARA OS PRIMEIROS NOVOS REGISTROS
        int indice = linhas.size();
        // ADICIONA OS REGISTROS
        linhas.addAll(c);
        // NOTIFICA AS MUDANÇAS
        fireTableRowsInserted(indice, indice + c.size());
    }
     // REMOVE TODOS OS REGISTROS
    public void limpar() {
        //REMOVE TODOS OS ELEMENTOS DA LISTA DE CONTATOS
        linhas.clear();
        // NOTIFICA A MUDANÇA
        fireTableDataChanged();
    } 
}





public class ContatoDao extends GenericDao {
	@SuppressWarnings("unused")
	private JTable tabela;
				
	public void salvar(Contato c) throws SQLException{
		
		String insertContato = " INSERT INTO CONTATO ( nome, data_nascimento, numero, rua, cidade, email, sexo, estado, estado_civil, complemento) VALUES (?,?,?,?,?,?,?,?,?,?)";
		int id = save(insertContato, c.getNome(), c.getDtNas(), c.getNumero(), c.getRua(), c.getCidade(), c.getEmail(), c.getSexo(), c.getEstado(), c.getEstadoCivil(), c.getComplemento());
		String insertTelefones = "INSERT INTO TELEFONE (id, Telefone) VALUES (?,?)";
		
		if (id > -1){
			save(insertTelefones, id, c.getTelefone());
			save(insertTelefones, id, c.getTelefone1());
			save(insertTelefones, id, c.getTelefone2());
		}
	}
	
	public void alterar (Contato c) throws SQLException{
		String update = "UPDATE CONTATOS" +
				" SET nome = ?, data_nascimento =?, numero=?, rua=? , cidade=? , email =?, sexo=?, estado=?, estado_civil=?, complemento=?" +
				" WHERE id =?";
		update(update,c.getNome(), c.getDtNas(), c.getNumero(), c.getRua(), c.getCidade(), c.getEmail(), c.getSexo(), c.getEstado(), c.getEstadoCivil(), c.getComplemento());
		
		String updates = "UPDATE TELEFONE SET Telefone =? ";
		save(updates, c.getId(), c.getTelefone(), c.getTelefone1(), c.getTelefone2());		
		
	}
	
	public void excluir (long id) throws SQLException{
		String delete = "DELETE FROM CONTATO WHERE id = ?";
		delete(delete, id);
	}
	
	public List<Contato> findContatos() throws SQLException{
		
		List<Contato> contatos = new ArrayList<Contato>();
		
		String select= "SELECT c.id, c.nome, c.data_nascimento, c.numero, c.rua, c.cidade, c.email ,c.sexo," +
				"c.estado, c.estado_civil, c.complemento, t.telefone " +
				"FROM CONTATO c " +
			    "LEFT OUTER JOIN TELEFONE t on c.id = t.id";
	
		PreparedStatement stmt = getConnection().prepareStatement(select);
		ResultSet rs = stmt.executeQuery();
		Contato c = new Contato();
		
		while (rs.next()){
			
			c.setId(rs.getInt("id"));
			c.setNome(rs.getString("nome"));
			c.setDtNas(rs.getDate("data_nascimento"));
			c.setNumero(rs.getString("numero"));
			c.setRua(rs.getString("rua"));
			c.setCidade(rs.getString("cidade"));
			c.setEmail(rs.getString("email"));
			c.setSexo(rs.getString("sexo"));
			c.setEstado(rs.getString("estado"));
			c.setEstadoCivil(rs.getString("estado_civil"));
			c.setComplemento(rs.getString("complemento"));
			c.setTelefone(rs.getString("telefone"));
			c.setTelefone1(rs.getString("telefone"));
			c.setTelefone2(rs.getString("telefone"));
			
			contatos.add(c);  
		}
		
		tabela = new JTable(new AgendaTableModel(contatos));
		
		rs.close();
		stmt.close();
		
		return contatos;
	
	}
	
public Contato finfByName(String nome) throws SQLException{		
		
		String select = "SELECT c.id, c.nome, c.data_nascimento, c.numero, c.rua, c.cidade, c.email ,c.sexo," +
				"c.estado, c.estado_civil, c.complemento, t.telefone " +
				"FROM CONTATO c " +
				"LEFT OUTER JOIN TELEFONE t on c.id = t.id WHERE c.nome LIKE ?";
		
		Contato c = new Contato();
		
		PreparedStatement stmt = getConnection().prepareStatement(select);
		stmt.setString(1, "%"+nome+"%");
		ResultSet rs = stmt.executeQuery();
		
		AgendaTableModel modelo = new AgendaTableModel();
		JTable tabela = new JTable(modelo);
		
		while (rs.next()){
			String[] dados = new String[13];
			//c.setId(rs.getInt("id"));
			 dados[0] = (rs.getString("nome"));
			 dados[1] = (rs.getString("email"));
			// dados[2] = (rs.getDate("data_nascimento"));
			 dados[3] = (rs.getString("numero"));
			 dados[4] = (rs.getString("rua"));
			 dados[5] = (rs.getString("cidade"));
			 dados[6] = (rs.getString("sexo"));
			 dados[7] = (rs.getString("estado"));
			 dados[8] = (rs.getString("estado_civil"));
			 dados[9] = (rs.getString("complemento"));
			 dados[10] = (rs.getString("telefone"));
			 dados[11] = (rs.getString("telefone"));
			 dados[12] = (rs.getString("telefone"));
			 
			// modelo.addContato(dados);
		}
		
		rs.close();
		stmt.close();
		 return c;		
	}
}

bom dia galera, tenho uma JTable mas não consigo mostrar os dados de uma consulta mySQL na tabela, tah dando erro nessas duas linhas…
// dados[2] = (rs.getDate(“data_nascimento”));
// modelo.addContato(dados);
alguem pode me ajuda… abraços

Use a tag [code] para postar código.
Qual o erro apresentado?

não mostra o erro, só não aparece a consulta…
antes eu fazia a consulta e mostrava na textField, mas preciso mostrar na tabela…
vlw

The method addContato(Contato) in the type AgendaTableModel is not applicable for the arguments (String[])

Se olhar bem o erro que você postou, está bem claro qual o problema.
O método addContato espera como parâmetro um objeto do tipo Contato e vc está passando um array de String.

tentei mudar isso, mas não consegui…

Onde exatamente vc não conseguiu?

Pelo que eu imagino é só trocar este array de strings pelo objeto, por exemplo:

Contato c = new Contato();
c.setNome(dados[1]);
c.setTeletone(dados[2]);

modelo.addContato(c);