Dúvida com MySQL e Java

4 respostas
N

Olá Galera…

Esse é meu primeiro post e to realmente precisando de uma ajuda.

O problema é o seguinte:

Estou fazendo uma aplicação de cadastro de clientes, funcionário e geração de “Comandas”. Nessa comanda, eu tenho um jComboBox pra os nomes do cliente e outro que mostra os nomes dos Funcionários.
Até aí, blz, consegui carrerar tudo vindo do BD, está tudo perfeito.

O problema é na hora de salvar. Quando clicar em salvar, tenho que atrelar esse cliente e o funcionário ao Pedido, mas, não pelo nome e sim pelo ID, já que pode haver nomes iguais.

MInha dúvida é, não estou conseguindo pensar na lógica de retornar o ID, quando tenho um cliente selecionado na jComboBox e o mesmo pra o Funcionario.

Já pensei no inner join, tenho que utilizar, porém, o problema é como capturar o idCliente/idFuncionario, pra poder inserir no BD.

Quaisquer códigos que necessitarem, basta informar.

Grato. =D

4 Respostas

otaviojava

você pode colocar todo o objeto dentro do JcomboBox e modificar o toString para aquilo que você deseja.
Depois você dá um get no Objeto selecionado
desse modo

SeuObjeto objeto=(SeuObjeto)comboBox.getSelectedItem();  
objeto.getId():

Espero que te ajude.

nel

Oi!

Você deve analisar a questão se um cliente pode possuir N funcionários e/ou se um funcionário pode possuir N clientes.
Um cliente, a principio, deve estar atrelado a um único funcionário enquanto o mesmo funcionário poderá ter N clientes, não é?

Pensando assim, você já tem a referência dos clientes na tabela funcionário, ou seja, o ID do cliente.
Para recuperar isso, antes de mais nada, deve existir esse atributo na sua classe Cliente e Funcionário. Isso é o que chamamos de composição.

O ideal é que quando tu carregar os funcionários ele já contenham o respectivo ID, pois são pré-cadastrados.
Os clientes podem ser “dinamicos”, ou seja, você pode não possuir o ID deles ainda. Supondo isso, você pode recuperar o ID do cliente após a inserção com o método getGeneratedKeys da interface PreparedStament.

Ele vai lhe retornar um ResultSet, em seguida, basta pegar a coluna do ID do cliente, em seguida, você passa esse valor ao funcioário que fará a atualização em sua tabela, indicando que um novo cliente foi adicionado.

Consegui clarear um pouco as idéias?
De resto é composição no Java mesmo.

Abraços.

N

Olá otaviojava,

Estou passando agora o objeto como parâmetro… usando sua dica…

nel, entendi sua dia… porém, o que me foi solicitado foi desse jeito que falei, será um atendente e um cliente no pedido… nesse pedido, caso o cliente não exista, há a opção de cadastro do mesmo.

Segue os códigos e o erro no qual estou me deparando:

Carrega os dados no combobox:

public void carregarCliente() throws FileNotFoundException, IOException, SQLException {

        DefaultComboBoxModel dcb = (DefaultComboBoxModel) this.jComboBox10.getModel();
        ControladorCliente cc = new ControladorCliente();

        List dados = cc.carregarNomeCliente();

        dcb.removeAllElements();
        
        // this.jComboBox10.removeAll();
        for (int i = 0; i < dados.size(); i++) {
            //dcb.addElement(dados.get(i).toString());
            this.jComboBox10.addItem(dados.get(i).toString());
        }
        
      
}

Item selecionado no combobox

System.out.print("cliente" + this.jComboBox10.getSelectedObjects().toString());
       //Resultado: cliente[Ljava.lang.Object;@5dfb22

       // System.out.print("cliente" + this.jComboBox10.getSelectedItem());

       //Se eu utilizo desse jeito, tem o seguinte erro:
       //Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to Modelo.Cliente
       //Cliente cli = (Cliente)this.jComboBox10.getSelectedItem();
        //clie.getCodigo();

Recuperando os dados do BD

public List carregarNomeCliente() throws FileNotFoundException, IOException, SQLException {

        Conexao conexao = new Conexao();
        con = conexao.conectar();

        List dados = new ArrayList();

        String nomeS ="SELECT idCliente, nome, endereco, cidade, cep, rg, date_format(data_nascimento, '%d/%m/%Y') as data_nascimento, email, telefone FROM Cliente";
       
        
        try {
            Statement stmt = (Statement) con.createStatement();
            ResultSet rs = stmt.executeQuery(nomeS);

            while (rs.next()) {
                

                String codigo = rs.getString("idCliente");
                String nome = rs.getString("nome");
                String endereco = rs.getString("endereco");
                String cidade = rs.getString("cidade");
                String cep = rs.getString("cep");
                String rg = rs.getString("rg");
                String data = rs.getString("data_nascimento");
                String email = rs.getString("email");
                String telefone = rs.getString("telefone");
                
                Cliente cc = new Cliente(codigo, nome, endereco, cidade, cep, rg, data, email, telefone);
                
                dados.add(cc);
                
                
            }
            
            rs.close();
            stmt.close();

            conexao.desconectar();
            return dados;
        } catch (Exception e) {
        
        }
        
        return null;
    }

Meu problema está nos erros agora:

Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: java.lang.String cannot be cast to Modelo.Cliente

e este:

cliente[Ljava.lang.Object;@f5c8fb
que não é bem um erro.

A questão é, como vou pegar o id?
://

Grato pelas respostas

N

Consegui galera…

O que o cansaço não faz…

segue o código certo;

for (int i = 0; i < dados.size(); i++) {

dcb.addElement(dados.get(i));

}

ou seja, retirei somente o toString() do dados.get(i);

Lembrando que o meu toString na Classe retorna somente o Nome do Cliente.

Obrigado pela ajuda galera =D

Criado 24 de agosto de 2011
Ultima resposta 24 de ago. de 2011
Respostas 4
Participantes 3