[Resolvido] Metódo Pesquisar não atualiza

2 respostas
L

Olá pessoal , sou novo aqui
Curso o 2° período de ADS e preciso criar um sistema com crud
Seguindo o padrão fachada , tendo como requisito controlador , repositório e tela.

To com um pequeno problema no metódo pesquisar , eu consigo encontrar o item , porém a tabela não atualiza quando eu preciso fazer outra consulta.

Eu estava usando a DefaultTable , porém como não conseguia tirar a edição dela , resolvi usar a AbstractModel.

Aqui está o código :

Tabela Modelo

package Telas;

import Aluno.Aluno;
import Fachada.Fachada;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

public class tableModel extends AbstractTableModel {

    ArrayList<Aluno> listaAluno = new ArrayList<Aluno>();
    Fachada fachada;

    tableModel() throws Exception {
        this.fachada = Fachada.getInstance();
        listaAluno = fachada.alunoProcurar();
    }

    
    public int getRowCount() {
        return listaAluno.size();
    }

    public void listaAtualiza(String tipo,String pesquisa) throws Exception {
        this.fachada = Fachada.getInstance();
        switch (tipo) {
            case "Todos":
                listaAluno = fachada.alunoProcurar();
                break;
            case "Nome":
                listaAluno = fachada.pesquisatexto(pesquisa);
               break;
            case "coluna2":
                listaAluno = fachada.alunoProcurar();
                break;
            case "colun3":
                listaAluno = fachada.alunoProcurar();
                break;
            case "coluna4":
                listaAluno = fachada.alunoProcurar();
        }

    }

    
    public int getColumnCount() {
        return 4;
    }

    
    public Object getValueAt(int row, int column) {
        Aluno aluno = listaAluno.get(row);
        switch (column) {
            case 0:
                return aluno.getNome();
            case 1:
                return aluno.getMatricula();
            case 2:
                return aluno.getCpf();
            case 3:
                return aluno.getTurma();
        }
        return null;
    }

    
    public String getColumnName(int col) {
        switch (col) {
            case 0:
                return "Nome";
            case 1:
                return " coluna2";
            case 2:
                return " coluna3";
            case 3:
                return " coluna4";
        }
        return null;

    }

}

Repositório

public ArrayList<Aluno> pesquisatexto(String pesquisa) {
       
        Connection conn = null;
			PreparedStatement pstm = null;
			ArrayList<Aluno> listaAluno = new ArrayList<Aluno>();
			String sql = "SELECT * FROM Alunos WHERE nome LIKE '" + pesquisa + "'";
		
		
            try {
                conn = ConnectionFactory.createConnectionToMySQL();
            } catch (Exception ex) {
                Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                pstm = conn.prepareStatement(sql);
             
            } catch (SQLException ex) {
                Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
            }
			
			ResultSet rs = null; 
            try {
                rs = pstm.executeQuery();
                
            } catch (SQLException ex) {
                Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
            }
			
            try {
                while(rs.next()) {
                    Aluno aluno = new Aluno();
                    try {
                        aluno.setNome(rs.getString("nome"));
                        aluno.setMatricula(rs.getString("matricula"));
                        aluno.setCpf(rs.getString("cpf"));
                        aluno.setTurma(rs.getString("turma"));
                     } catch (SQLException ex) {
                        Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    listaAluno.add(aluno);
                    
                    System.out.println("Nome: " + rs.getString("nome"));
                    
                   
                }
            } catch (SQLException ex) {
                Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                pstm.close();
            } catch (SQLException ex) {
                Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
            }

			return listaAluno;
    }

    
}

Tela

public void keyReleased(KeyEvent arg0) {

            	
            	String pesquisa = txtPesquisa.getText();
        		try {
					Fachada.getInstance().pesquisatexto(pesquisa);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

        		try {
        			model.listaAtualiza("Nome", pesquisa);
        		} catch (Exception ex) {
        			Logger.getLogger(TelaConsulta.class.getName()).log(Level.SEVERE,
        					null, ex);
        		}
        		try {
					Fachada.getInstance().alunoListar();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
        		model.fireTableDataChanged();

            
        	}

============================================================

EDITADO

Pesquisando na internet encontrei a solução , algo muito simples

Apenas mudei a sql e passei a PreparedStatement com '%'

E ficou assim

String sql = "SELECT * FROM Alunos WHERE nome LIKE ?";
		
		
            try {
                conn = ConnectionFactory.createConnectionToMySQL();
            } catch (Exception ex) {
                Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                pstm = conn.prepareStatement(sql);
                pstm.setString(1,  '%' + pesquisa + '%');
            } catch (SQLException ex) {
                Logger.getLogger(RepositorioAluno.class.getName()).log(Level.SEVERE, null, ex);
            }

2 Respostas

ingoguilherme

Não entendi direito seu problema quanto a não atualizar a tabela para outra consulta, tem com explicar melhor?

Para tirar a edição da DefaultTable instâncie da seguinte forma:

DefaultTableModel model = new DefaultTableModel(){ public boolean isCellEditable(int rowIndex, int mColIndex) { return false; } };

L

ingoguilherme:
Não entendi direito seu problema quanto a não atualizar a tabela para outra consulta, tem com explicar melhor?

Para tirar a edição da DefaultTable instâncie da seguinte forma:

DefaultTableModel model = new DefaultTableModel(){ public boolean isCellEditable(int rowIndex, int mColIndex) { return false; } };

Olá Guilherme,
Para deixar mais bem explicado eu não comentei que estava keyReleased no campo da procura…
E então qual era o problema?
Eu estava digitando o nome de um Aluno , ok achava, porém quando eu deixava o campo em branco novamente ele não mostrava mais nada , apenas a tabela vazia.

E sobre o caso isCellEditable eu não conseguir tirar a edição da tabela.
No netbeans não é possível editar essa parte do código e no eclipse eu editava mas não funcionava , não mudava em nada.

Abraço.

Criado 19 de novembro de 2014
Ultima resposta 20 de nov. de 2014
Respostas 2
Participantes 2