Consulta num Jtable

5 respostas
P

Boa Noite,
estou tentando fazer a seguinte tela
escreve nome e parte o botão consultar, nisso deveria apresentar os dados numa tabela ja pronta. tentei o seguinte código, mais n ta rolando.
Poderiam me ajudar? ele não a erro, somente n gera na tabela

try{
conexao();
DefaultTableModel JCONSULTA = new DefaultTableModel(null, new String[] {"Código", "Nome", "Cpf"});
JTable tabela = new JTable(JCONSULTA);  
    resultSet = statement.executeQuery
        ("SELECT r.nome, r.horario, r.estadio FROM restaurante r, categoria c\n" +
"where r.categoria_idcategoria = c.idcategoria");
    
        while (resultSet.next()){
    String[] dados = new String[3];  
    dados[0] = resultSet.getString("nome");  
    dados[1] = resultSet.getString("horario");  
    dados[2] = resultSet.getString("estadio");  
    
    JCONSULTA.addRow(dados); 
            }             catch(Exception e){
            System.out.println("Não foi possivel conectar ao banco");
        }

5 Respostas

L

Boa noite,

tente fazer da seguinte maneira fechar a {} do seu while, declare a sua DefaultTableModel fora do try
e não passe o seu model no construtor da JTable e sim use a a propriedade setModel da JTable .
Isso porque a JTable usa o padrão MVC e o model se trata da camada de dados.

Assim:

public void PreencheTabela(){
DefaultTableModel JCONSULTA;

try{
JCONSULTA new DefaultTableModel(null, new String[] {"Código", "Nome", "Cpf"});  
//instância a sua JTable
JTable tabela = new JTable();
//define o modelo(camada de dados) da JTable
tabela.setModel(JCONSULTA);

//continue o seu código

}catch(Exception e){
//trate a sua exceção aqui
}
}

Espero ter ajudado
Caso continue a apresentar problemas avise e poste o código

P

Lucas,
Consegui fecha a consulta bem simples…

tabela.getColumnModel().getColumn(0).setPreferredWidth(20);
    tabela.getColumnModel().getColumn(1).setPreferredWidth(20);
    tabela.getColumnModel().getColumn(2).setPreferredWidth(10);

    //Cria modelo de tabela
          DefaultTableModel modelo = (DefaultTableModel)tabela.getModel();
          modelo.setNumRows(0);
          
          //chama classe categorias
          categorias cg = new categorias();
          cg.setNome(Nome.getText());
          
        try{
            
            conectabanco();
            System.out.println(Nome.getText());   
            //executa selec para pesquisar restaurantes
            
            String sqlQuery =
"SELECT r.nome, r.horario, r.estadio FROM restaurante r, categoria c\n" +
"where r.idcategoria = c.idcategoria and c.nome like ?";
            
PreparedStatement ps = connection.prepareStatement(sqlQuery);  
//A linha abaixo, ira comparar o text o digitado procurando no selec acima
ps.setString(1, "%" + Nome.getText() + "%");
//executa consulta
ResultSet resultSet = ps.executeQuery();
  
        //("SELECT r.nome, r.horario, r.estadio FROM restaurante r, categoria c\n" +
//"where r.categoria_idcategoria = c.idcategoria and c.nome like %" + Nome.getText()+"%" );
        
            while (resultSet.next()){
                //traz os dados
          String[] dados = new String[3];  
          dados[0] = resultSet.getString("nome");  
          dados[1] = resultSet.getString("horario");  
           dados[2] = resultSet.getString("estadio");  
          modelo.addRow(dados);
         }}
             catch(Exception e){
            System.out.println("Não foi possivel conectar ao banco");
        }

    }

Mais estou com outro problema, preciso cadastrar dados que se encontram num combox… COmo faço isso, alguma ajuda?

L

Então para cadastrar os dados que estão no comboBox

JComboBox comboBox;
//instancia o seu combo
//escreve o seu codigo
// no ato que você for gravar, para capturar o texto do comboBox
String textoCombo = comboBox.getSelectedItem().toString();

Outra dica boa seria você utilizar o padrão MVC no seu projeto,
assim você evita a repetição do código em vários trechos da aplicação e facilita a manutenção
No caso toda a parte que se refere a comunicação e interação com o banco de dados pode
ficar numa classe separada cada operação em um método distinto.

Caso você tenha mais de uma comboBox é so repetir o codigo acima.
Se na sua combo o dado for de outro tipo que não seja texto é só fazer o cast para o tipo adequado.
o metodo “getSelectedItem()” retorna um objeto

P

Voou fazer aqui,
como vou chamar uma classe de conexão?
conexao = new conexao();?
valeu

L

Assim

Voce cria uma classe onde em cada metodo voce chama a conexão

//Exemplo
public class ExemploDAO(){

public String[] selecionaRestaurante(String Nome){
          String[] dados = new String[3];
    
try{               
            //que é a sua connection
            Connection con = conectabanco();  
            System.out.println(Nome);     
            //executa selec para pesquisar restaurantes                
            String sqlQuery =  "SELECT r.nome, r.horario, r.estadio FROM restaurante r, categoria c\n" +  
                                        "where r.idcategoria = c.idcategoria and c.nome like ?";  
              
           PreparedStatement ps = connection.prepareStatement(sqlQuery);    
           //A linha abaixo, ira comparar o text o digitado procurando no selec acima  
           ps.setString(1, "%" + Nome + "%");  
          //executa consulta  
          ResultSet resultSet = ps.executeQuery();  
    
        //("SELECT r.nome, r.horario, r.estadio FROM restaurante r, categoria c\n" +  
       //"where r.categoria_idcategoria = c.idcategoria and c.nome like %" + Nome.getText()+"%" );  
          
            while (resultSet.next()){  
                //traz os dados  
          dados[0] = resultSet.getString("nome");    
          dados[1] = resultSet.getString("horario");    
           dados[2] = resultSet.getString("estadio");      
         }
         resultSet.close();
         ps.close();
         con.close();
    } catch(Exception e){  
            System.out.println("Não foi possivel conectar ao banco");  
        } 
return dados;

}
}

Ai você você implementa a consulta,update,insert,delete em metodos separados e o retorno na View(que no caso é o seu JFrame) voce chama a classe e o metodo que voce quer

ExemploDAO dao = new ExemploDAO();
String [] dados = dao.selecionaRestaurante(Nome.getText());
modelo.addRow(dados);
Criado 23 de junho de 2014
Ultima resposta 26 de jun. de 2014
Respostas 5
Participantes 2