Print columns no List?

4 respostas
androidelp

boa Noite,

No meu script usei um código que lista os clientes de uma base de dados em um combobox, agora quando o usuário usar o evento ItemStateChanged, o código deveria pegar o cliente selecionado e efetuar um select na base de dados e depois enriquecer com informações os labels do formulário.
no ResultSet utilizei uma variavel List que receberia todas as informações, porém não sei como dar um get nas colunnas, sempre me retorna column null como erro.

segue o código:

Código do select enriquecendo com linhas e colunas a variavel List

public List resultadoConsulta(String cliente) throws SQLException{
        
        instrucao = conexao.createStatement();
        
        List celulas = new ArrayList();
    
            ResultSet rs = instrucao.executeQuery( "Select * from registro where Cliente = '"+cliente+"'" );
    
        while(rs.next())
                {
                celulas.add(rs.getString(cliente) + " " + rs.getString("obs") + " " + rs.getString("total_horas") + " " + rs.getString("horas_usadas")  );
                
                }
        
        return celulas;
        
    }

código do evento select do combobox, conexão e tratamento das informações:

private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {
// valor do evento de selecionar o jcombobox EXEMPLO
    //String str = (String)combo.getSelectedItem();
  //txt.setText(str);
    
    conexao cn = new conexao();
    
    cn.conectar();
    
    List InserirValor = new ArrayList();
    
  String ValorCombo =  (String)jComboBox1.getSelectedItem();  
  
  
        try {
            InserirValor = cn.resultadoConsulta(ValorCombo);
            
            //Resolver problema com as colulas
            lbNome.setText(InserirValor.get(1).toString());
            
            cn.desconectar();
        } catch (SQLException ex) {
            Logger.getLogger(Exibir.class.getName()).log(Level.SEVERE, null, ex);
            
            cn.desconectar();
        }
    
    
    
}

Busco uma forma mais fácil de pegar os valores da tabela e distribuilos nos labels.

Obrigado

4 Respostas

Roger75

Acho que você tem que usar a classe que represente o Model

List celulas = new ArrayList();  
     
ResultSet rs = instrucao.executeQuery( "Select * from registro where Cliente = '"+cliente+"'" );  
Celula c=null
while(rs.next())  
               {  
              c=new Celula();
              c.setCliente(rs.getString(cliente));
              // demais sets
              celulas.add(c);
                
}
Daí na view você faz:
Celula c=(Celula)lista.get(i);
String cliente=c.getCliente();
E não esqueça de dar close nos resultsets, statements e connections após usá-los, para não ocorrer leak.
androidelp

Desculpe sou iniciante e não entendi o final "view"

Celula c=(Celula)lista.get(i);  
String cliente=c.getCliente();

Você não usa a List mais? E como o getCliente consegue pegar a informação do setCliente
Bem fiz a classe Celula com o setCliente e o getCliente desta forma:

class Celula {
    
    String ValorCliente;
    
    
    public void setCliente(String Valor){
        
    ValorCliente = Valor;    
        
    
    }
    
    public String getCliente(){
        
        return ValorCliente;
    
    }
    
    
    
}

no código que faz a conexao deixei desta forma:

public void resultadoConsulta(String cliente) throws SQLException{
        
        instrucao = conexao.createStatement();
        
        
    
            ResultSet rs = instrucao.executeQuery( "Select * from registro where Cliente = '"+cliente+"'" );
            Celula c= new Celula();
            
    
        while(rs.next())
                {
                c.setCliente(rs.getString("Cliente"));
                
                
                
                }
        
        rs.close();
        
        
        
        
        
    }

e no código que coloca a celula na label

private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {                                            
// valor do evento de selecionar o jcombobox EXEMPLO
    //String str = (String)combo.getSelectedItem();
  //txt.setText(str);
    
    conexao cn = new conexao();
    
    Celula cl = new Celula();
    
    cn.conectar();
    
    List InserirValor = new ArrayList();
    
  String ValorCombo =  (String)jComboBox1.getSelectedItem();  
  
  
        try {
            cn.resultadoConsulta(ValorCombo);
            
            //Resolver problema com as colulas
            lbNome.setText(cl.getCliente());
            
            cn.desconectar();
        } catch (SQLException ex) {
            Logger.getLogger(Exibir.class.getName()).log(Level.SEVERE, null, ex);
            
            cn.desconectar();
        }
    
    
    
}

Ele não dá mais erro porém não enriquece a label com o retorno, acredito que na classe setCelula quando recebe o valor e atribui para String ValorCliente o valor é zerado quando chamo getCelula.

Roger75

Mas você mudou o retorno do resultadoConsulta para void… tem que ser um List…

androidelp

Na realidade efetuei vários testes para trazer um retorno no textfield porém nada, pensei que era um problema com jComboBox1ItemStateChanged então fiz uma seleção simples onde ele efetua a conexão com o banco um unico valor string na variavel e retorna este valor, que é o útimo exemplo que passei porém ele não me retorna erro mas textfield não efetua a atualização.

O que fiz para resolver isso foi tirar todo o processo de seleção do metodo e colocá-lo diretamente no main e isso resolveu o problema!!! Eu não sei o porquê que ele não aceitava isso: Porém bola pra frente :smiley:

conexao cn = new conexao();

cn.conectar();

try {

labelCliente.setText(cn.resultadoConsulta("Samsung"));

cn.desconectar(); 

} catch (SQLException ex) {  
            Logger.getLogger(Exibir.class.getName()).log(Level.SEVERE, null, ex);  
              
            cn.desconectar();  
        }
Criado 6 de junho de 2012
Ultima resposta 11 de jun. de 2012
Respostas 4
Participantes 2