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);
}