Dúvida no retorno de informação de um banco de dados!

9 respostas Resolvido
A

Olá pessoal, minha duvida está no retorno das informações no banco, estou desenvolvendo um código para aprendizado mesmo, e existe uma tela para a pesquisa dos cargos cadastrados, consegui fazer o link com o banco e inserir informações em outra tela, mas quando vou buscar essas informações, ela vem no formato apresentado nas imagens que enviei (sou novato e pude enviar somente uma), e o mais engraçado é que quando vou deletar um cargo, aparece o nome certo, se alguém puder me dar uma luz, ficarei grato! Ele esta funcionando, pesquisando e excluindo, porem apresentando acho que eu a referencia do objeto e não objeto em si!!resultado_excluir

9 Respostas

Fefo80

Já experimentou usar .toString() ?

staroski

O que está aparecendo nessas linhas é o resultado da implementação padrão do método toString() da classe Cargo.

Que componente é, JList ou JTable?
Como você está populando esse componente?
Implementou um ListModel ou um TableModel?

Posta o código e não esqueça de formatar como o botão </>.

Cristian-Sknz

Tenta utilizar o CellFactory esse metodo da um update em cada objeto da Lista:

ListView<Cargo> listView = ...
listView.setCellFactory(lv -> new ListCell<Cargo>() {

@Override
protected void updateItem(Cargo cargo, boolean empty) {
    super.updateItem(cargo, empty);
    if (empty || cargo == null) {
        setText("");  // Para deixar vazio caso seja nulo
    } else {
        // Nome do cargo
        setText(cargo.getName());
    }
}

});

Cristian-Sknz

Cuidado com o que vai fazer dentro do método updateItem, isso pode fazer com que sua aplicação demore para carregar as listas. Pode utilizar um thread pool caso deseje fazer algo mais avançado.

A
package sistema.telas;

import java.awt.Font;Texto pré-formatado
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JTextField;
import sistema.BancoDeDados;
import sistema.entidades.Cargo;

public class CargosConsultar extends JPanel {
    
    Cargo cargoAtual;
    JLabel labelTitulo, labelCargo;
    JTextField campoCargo;
    JButton botaoPesquisar, botaoEditar, botaoExcluir;
    DefaultListModel<Cargo> listasCargosModelo = new DefaultListModel();
    JList<Cargo> listaCargos;

public CargosConsultar(){
    criarComponentes();
    criarEventos();
}

private void criarComponentes(){
    setLayout(null);
    
    labelTitulo = new JLabel("Consulta de Cargos", JLabel.CENTER);
    labelTitulo.setFont(new Font(labelTitulo.getFont().getName(), Font.PLAIN, 20));
    labelCargo = new JLabel("Nome do cargo", JLabel.LEFT);
    campoCargo = new JTextField();
    botaoPesquisar = new JButton("Pesquisar Cargo");
    botaoEditar = new JButton("Editar Cargo");
    botaoEditar.setEnabled(false);
    botaoExcluir = new JButton("Excluir Cargo");
    botaoExcluir.setEnabled(false);
    listasCargosModelo = new DefaultListModel();
    listaCargos = new JList();
    listaCargos.setModel(listasCargosModelo);
    listaCargos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    
            
    labelTitulo.setBounds(20, 20, 660, 40);
    labelCargo.setBounds(150, 120, 400, 20);
    campoCargo.setBounds(150, 140, 400, 40);
    botaoPesquisar.setBounds(560, 140, 130, 40);
    listaCargos.setBounds(150, 200, 400, 240);
    botaoEditar.setBounds(560, 360, 130, 40);
    botaoExcluir.setBounds(560, 400, 130, 40);
    
    add(labelTitulo);
    add(labelCargo);
    add(campoCargo);
    add(listaCargos);
    add(botaoPesquisar);
    add(botaoEditar);
    add(botaoExcluir);
    
    setVisible(true);
    
}

private void criarEventos(){
    botaoPesquisar.addActionListener(new ActionListener(){
       @Override
       public void actionPerformed(ActionEvent e){
           sqlPesquisarCargos(campoCargo.getText());
       }
    });
    botaoEditar.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            
        }            
    });
    botaoExcluir.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            sqlDeletarCargo();                
        }            
    });
    listaCargos.addListSelectionListener(new ListSelectionListener(){
        @Override
        public void valueChanged(ListSelectionEvent e){
            cargoAtual = listaCargos.getSelectedValue();
            if(cargoAtual == null){
                botaoEditar.setEnabled(false);
                botaoExcluir.setEnabled(false);                    
            }else{
                botaoEditar.setEnabled(true);
                botaoExcluir.setEnabled(true);
            }
        }            
    });
}

private void sqlPesquisarCargos (String nome){
    
    //conexão
    Connection conexao;
    //intrução SQL
    Statement instrucaoSQL;
    // resultados
    ResultSet resultados;
    
    try{
        //conectando ao banco de dados
        conexao = DriverManager.getConnection(BancoDeDados.stringDeConexao, BancoDeDados.usuario, BancoDeDados.senha);
        
        // criando a instrução SQL
        instrucaoSQL = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        resultados = instrucaoSQL.executeQuery("SELECT * FROM cargos WHERE nome like '%"+nome+"%'");
        
        listasCargosModelo.clear();
        
        while (resultados.next()){
            Cargo cargo = new Cargo();
            cargo.setId(resultados.getInt("id"));
            cargo.setNome(resultados.getString("nome"));
            
            
            listasCargosModelo.addElement(cargo);
        }
       
    }catch(SQLException ex){
        
        JOptionPane.showMessageDialog(null, "Ocorreu um erro ao consultar os cargos.");
        Logger.getLogger(CargosInserir.class.getName()).log(Level.SEVERE, null, ex);            
        
    }
    
}

private void sqlDeletarCargo(){
    
    int confirmacao = JOptionPane.showConfirmDialog(null, "Deseja realmente excluir o Cargo: "+cargoAtual.getNome()+"?", "Excluir", JOptionPane.YES_NO_OPTION);
    if (confirmacao == JOptionPane.YES_OPTION){
   
    //conexão
    Connection conexao;
    //intrução SQL
    Statement instrucaoSQL;
    // resultados
    ResultSet resultados;
    
    try{
        //conectando ao banco de dados
        conexao = DriverManager.getConnection(BancoDeDados.stringDeConexao, BancoDeDados.usuario, BancoDeDados.senha);
        
        // criando a instrução SQL
        instrucaoSQL = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        instrucaoSQL.executeUpdate("Delete cargos WHERE id="+cargoAtual.getId()+"");
        
        JOptionPane.showMessageDialog(null, "Cargo deletado com sucesso!");
       
    }catch(SQLException ex){
        
        JOptionPane.showMessageDialog(null, "Ocorreu um erro ao excluir o cargos.");
        Logger.getLogger(CargosInserir.class.getName()).log(Level.SEVERE, null, ex);            
        
    } 
}

}
}

A

Como estou seguindo um curso online, utilizei o código apresentado na tela, e no curso o resultado deu certo, e aparentemente não utilizava o .toString(), então por isso ainda não tentei.

A

Olá Cristian, como estou seguindo um curso online, estava usando o código como apresentado na tela, mas no curso, o código funcionava, pode até ser na tela tenha faltado alguma parte do código mas o que você falou é verdade, apesar de ter poucas opções no banco, ela demora um pouco a aparecer.

staroski
Solucao aceita

Não usa o DefaultListModel, implemente seu próprio modelo para renderizar uma lista de Cargo.

A

Vou tentar isso, continuei o projeto, e deu muito mais erros, antes era só esse, eu não sei se sou eu ou alguém que fecha o tópico, eu procurei e não achei como fechar, agradeço a todos que postaram as soluções

Criado 16 de março de 2021
Ultima resposta 19 de mar. de 2021
Respostas 9
Participantes 4