Exportar/Pesquisar

Bom dia, estou com dois problemas principais em meu banco de dados.

Estou usando o Postgresql

Meus principais problemas são os seguintes, eu tenho a seguinte classe:

public class ModeloTabela extends AbstractTableModel{

private ArrayList linhas = null; //armazena dados
private String[] colunas = null; //armazena nome das colunas

public ModeloTabela(ArrayList lin, String[] col){
    setLinhas(lin);
    setColunas(col);
}

public ArrayList getLinhas(){
    return linhas;
}
public void setLinhas(ArrayList dados){
    linhas = dados;
}

public String[] getColunas(){
    return colunas;
}
public void setColunas(String[] nomes){ //nomes das colunas
    colunas = nomes;
}

public int getColumnCount(){ //numero de colunas
    return colunas.length;
}
public int getRowCount(){ //numero de linhas
    return linhas.size();
}

public String getColumnName(int numCol){ //passa o numero de colunas
    return colunas[numCol];
}
public Object getValueAt(int numLin, int numCol){
    Object[] linha = (Object[])getLinhas().get(numLin);
    return linha[numCol];
}

}

E na minha classe que tenho a jtable tenho:

public void preencherTabela(String SQL){

ArrayList dados = new ArrayList();

String[] Colunas = new String[]{“ID”,“Empresa”,“Contato”,“Telefone 1”,“Telefone 2”,“Telefone 3”};

    conectando.executaSQL(SQL);
 
    try {
        conectando.rs.first();
        do{
            dados.add(new Object[]{conectando.rs.getInt("con_id"),conectando.rs.getString("con_empresa"),conectando.rs.getString("con_contato"),conectando.rs.getString("con_tel1"),conectando.rs.getString("con_tel2"),conectando.rs.getString("con_tel3")});
        
        }while(conectando.rs.next());
        
    } catch (SQLException ex) {
       JOptionPane.showMessageDialog(null, "Erro ao preencher o Arraylist!\nERRO "+ex);
    }
    
    ModeloTabela modelo = new ModeloTabela(dados, Colunas);
    jTabelaResumo.setModel(modelo);
    jTabelaResumo.getColumnModel().getColumn(0).setPreferredWidth(50); // ID
    jTabelaResumo.getColumnModel().getColumn(0).setResizable(false);
    jTabelaResumo.getColumnModel().getColumn(1).setPreferredWidth(120); //Empresa
    jTabelaResumo.getColumnModel().getColumn(1).setResizable(true);
    jTabelaResumo.getColumnModel().getColumn(2).setPreferredWidth(120); //Contato
    jTabelaResumo.getColumnModel().getColumn(2).setResizable(true);
    jTabelaResumo.getColumnModel().getColumn(3).setPreferredWidth(130); //Telefone 1
    jTabelaResumo.getColumnModel().getColumn(3).setResizable(false);
    jTabelaResumo.getColumnModel().getColumn(4).setPreferredWidth(130); //Telefone 2
    jTabelaResumo.getColumnModel().getColumn(4).setResizable(false);
    jTabelaResumo.getColumnModel().getColumn(5).setPreferredWidth(130); //Telefone 3
    jTabelaResumo.getColumnModel().getColumn(5).setResizable(false);
    jTabelaResumo.getTableHeader().setReorderingAllowed(false);
    jTabelaResumo.setAutoResizeMode(jTabelaResumo.AUTO_RESIZE_OFF);
    jTabelaResumo.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

}

Meu problema eu não consigo fazer um pesquisar eficiente, que por exemplo mostre os cadastros de quem inicia com a letra P ou algo do gênero, tentei alguns códigos de pesquisa direto na jtable, mas não tive resultados alguém poderia me ajudar?

Outro dos meus problemas, eu não consigo exportar esta jtable para um excel para que depois possa ser impressa, como um relatório, todas as instruções que encontrei não me ajudaram, sou iniciante então não consegui nada complexo ainda.

Obrigado

Bom, sobre sua pesquisa, não sei se ajuda, mas recentemente fiz uma caixa de busca em tempo real. Ainda estou melhorando, porque ela está extremamente lenta, devido a comparação feita com o método contains()

Algo como…

Connection conn = null;
	model.setRowCount(0);
	try {
		Class.forName(driver);
		conn = DriverManager.getConnection(url,user,password);
		Statement stm = conn.createStatement();
			
		ResultSet rId = stm.executeQuery("SELECT A001_ID FROM A001");
		ResultSet rNome = stm.executeQuery("SELECT A001_NOME FROM A001");

			
			while(rId.next() && rNome.next() ) {
				if(rNome.getString("A001_NOME").contains(tBusca.getText())) {
// aqui ele vê se no meu banco, o campo A001_NOME tem o que digitei
					model.addRow(new Object[]{rId.getString("A001_ID"),rNome.getString("A001_NOME")});
// se tiver, ele atualiza a minha tabela com as informações que eu digito.
// No caso, tá verificando nome pra preencher o resto das informacoes
					
				}
				
			}
}

Pra exportar… Ce precisa, creio eu, fazer um laço de repetição pra ele capturar os campos da sua tabela e ir inserindo na sua planilha do excel. De novo. Captura os campos da sua tabela e vai inserindo na planilha do excel. Pra exportar, ce usar o JFileChooser

Tentei aplicar aqui, mas não sou muito bom com isso, não intendi muito quando voce chama o model.setRowCount(0); eu tenho um método de pesquisa em outra classe, porem ele não retorna na tabela mas sim em campos jtext, e neste caso ele busca apenas o nome exato que esta no banco, nao encontra por proximidade, se eu conseguir adaptar ele para buscar por proximidade ficaria bom

try {
PreparedStatement pst = conectando.conn.prepareStatement(“select * from contatos where con_empresa = ?”);
pst.setString(1, jtfEmpresa.getText().trim());
pst.execute();

            conectando.rs = pst.executeQuery();
            if(conectando.rs.next()){
       jtfCod.setText(String.valueOf(conectando.rs.getInt("con_id")));
            jtfEmpresa.setText(conectando.rs.getString("con_empresa"));
            jtfContato.setText(conectando.rs.getString("con_contato"));
            jdcData.setDate(conectando.rs.getDate("con_datacad"));
            jtfEmail1.setText(conectando.rs.getString("con_email1"));

} else {
JOptionPane.showMessageDialog(null, “Nome não encontrado, preencha corretamente!”);
}

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro na pesquisa\nERRO:" +ex);
        }