[excluir no banco selecionando coluna da jtable]

13 respostas
ken420

Pessoal eu tenho o metodo de selecionar a tabela funcionando agora meu problema ta sendo como que eu excluo a linha selecionada no banco!

private void tbClientesLinhaSelecionada(JTable tb)
    {
        if (tb.getSelectedRow() != -1)
        {
            System.out.println("Cliquei");
        }
        else
        {
            tfNomeF.setText("");
            tfCodigoF.setText("");
        }
    }

esse codigo acima quando eu clico em alguma linha da tabela ele aparece na tela Cliquei e tenho quase que certeza absoluta que sera apartir dai que irei implementar o metodo de excluir! obrigado pela atencao!

13 Respostas

ken420

se algueim tiver algum exemplo fico agradecido pois sou jovem ainda na area da programacao ;/ mas to batalhando!

moacirjava

Esse é um exemplo de código de uma aplicação que fico brincando nos fins de semana...

if(evt.getClickCount() == 2){
            //Pega a linha referente ao codigo a coluna eh sempre 0(zero).
            int linha = jtPesquisarDizimistas.getSelectedRow();
            
            //Pega o dado de dentro da celula da tabela.
            String dado = (String) jtPesquisarDizimistas.getValueAt(linha, 1);

            //Pega o codigo e...
            String codigo = String.valueOf(jtPesquisarDizimistas.getValueAt(linha, 0));

            //converte pra inteiro.
            int cod = Integer.parseInt(codigo);

            //Pergunta para o usuario.
            int estado = JOptionPane.showConfirmDialog(null, "Dado: " + dado + "\n Codigo: " + cod, "Deseja carregar o cadastro?", JOptionPane.YES_NO_OPTION);
            System.out.println("Valor do estado: " + estado);

Na linha onde coloco getValue(linha,1) esse 1 é por causa que me interessa é só o conteúdo da primeira coluna. Com os dados da tabela eu pego o código do meu dado, ai tendo esse código vc faz o que quiser.

Acho que com isso vc já consegue se virar mas qualquer problema posta ai.

V

Pegue o elemento selecionado através do método nome_tabela.getSelectedIndex().

Feito isso , posicione o seu RS com o método rs.absolute(indice_tabela + 1).
Esse + 1 aí é porque a primeira linha da tabela tem o índice 0.

Agora você consegue o id do seu registro selecionado, por exemplo rs.getInt(“idTabela”), e aí é só chamar o seu método de exclusão!

Quanto ao evento, adicione um MouseClicked a tabela e veja se o usuário deu dois cliques

private void tableMouseClicked(java.awt.event.MouseEvent evt) { if (evt.getClickCount() == 2) { selecionarRegistro(); }

ken420

Blz… consegui selecionar a linha , mas como faço para mim com a linha selecionada se eu der ação a um botao para excluir no banco ele excluir… isso que nao entendi ainda!

ken420

pessoal veja como fico fis varias modificaçoes mas ainda nada ta dando nullpointer no executeSql ;/

private void tbClientesLinhaSelecionada(JTable tb)
    {
        if(tb.getSelectedRow() != -1)
        {
            int linha = tb.getSelectedRow();
            try
            {
                String sql = "select * from produto Where codigo = "+(tb.getValueAt(linha, 1));
                con_Tabela.executeSQL(sql);
                con_Tabela.resultset.first();
                String nome = "Deletar o produto : "+con_Tabela.resultset.getString("nome")+" ?";
                int opcao_escolhida = JOptionPane.showConfirmDialog(null,nome,"Exclusão ",JOptionPane.YES_NO_OPTION);
                if (opcao_escolhida == JOptionPane.YES_OPTION)
                {
                    sql = "DELETE FROM produto Where codigo = "+(tb.getSelectedRow()!= -1);
                    int conseguiu_excluir = con_Tabela.statement.executeUpdate(sql);
                    if (conseguiu_excluir == 1)
                    {
                        JOptionPane.showMessageDialog(null,"Exclusão realizada com sucesso");
                    }
                }
                else
                return;
            }
            catch (SQLException erro)
            {
                JOptionPane.showMessageDialog(null,"Erro a tentar excluir o registro..."+erro);
            }
        }
        else
        {
            tfNomeF.setText("");
            tfCodigoF.setText("");
        }
    }

o erro aponta aqui!!!

con_Tabela.executeSQL(sql);
V

Cara, nem sempre a posição do seu getSelectedIndex() é igual a Id do seu registro no banco!

Por isso que te sugiro você pegar a linha selecionada e posicionar o seu resultset com ela. Aí sim, você vai pegar o Id do seu registro corretamente, aravés do resultSet.

Outra sugestão que eu te dou é separar suas classes corretamente, isto é , criar uma classe de acesso ao banco de dados, uma de aplicação e a outra sendo sua GUI!

Gui >> Aplicação >> Banco de dados

ken420

veja o que eu mudei e mesmo assim o erro persiste fis o que vc falou

String sql = "select * from produto Where codigo = "+(con_Tabela.resultset.absolute(linha +1 ));
                con_Tabela.resultset.getInt("nome");
                con_Tabela.executeSQL(sql);

e continua dando o mesmo erro ainda estou fazendo algo errado?

V

ken420:
veja o que eu mudei e mesmo assim o erro persiste fis o que vc falou

String sql = "select * from produto Where codigo = "+(con_Tabela.resultset.absolute(linha +1 ));
                con_Tabela.resultset.getInt("nome");
                con_Tabela.executeSQL(sql);

e continua dando o mesmo erro ainda estou fazendo algo errado?

Olha só , você pode fazer isso!

con_Tabela.resultset.absolute(linha +1 );
String sql = “select * from produto Where codigo = “+(con_Tabela.resultset.getInt(“Codigo”))+”;”;

V

Hoje eu fiz um exemplo bem parecido em um sistema que eu estou desenvolvendo!

Olha só como eu implementei!

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if(JOptionPane.showInternalConfirmDialog(this,"Excluir esta Venda ?",
                                                 "Pós Venda",
                                                 JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
        {
            try
            {
                 this.rs.absolute(table.getSelectedRow()+1); //posicion1ando o resultSet na posição referente a selecionada na tabela
                 //o método absolute posiciona o cursor no result na linha desejada
                 rsItem = null;
                 rsItem = Item.pesquisa(rs.getString("idVenda"),"idVenda");
                 

                 
                 while (rsItem.next())
                 {
                     Peca peca = new Peca(rsItem.getInt("idPeca"),rsItem.getInt("quantidade")); //fazendo o estorno para o estoque
                     peca.incrementaEstoque();
                     Item item = new Item(rsItem.getInt("idItem"));
                     item.exclui();
                     System.out.println(rsItem.getString("idItem"));
                 }
                
                 Venda venda = new Venda(rs.getInt("idVenda"));
                 venda.exclui();

                 while (table.getModel().getRowCount() != 0) /*Apagando todas as linhas da tabela
                    table.getModel().getRowCount() retorna o numero de linhas da coluna*/
                    model.removeRow(0);


            }
            catch (SQLException s)
            {
                 s.printStackTrace();
            }
        }

    }
ken420

veja só amigo, consegui atravéz deste metodo excluir o item no meu banco porem ta dando erros estranhos do tipo quando seleciono a opcao YES_OPTION e ele deleta o arquivo, depois que ele exclui o arquivo em qualquer lugar que eu clicar seja jTextField ou botoes, eu clico e ele pg se eu quero deletar todos os items da minha tabela linha por linha aparece a YES_NO_Option para mim escolher pq isso? e tambem para mim atualizar minha jtable depois que eu deleto o arquivo tenho que fexar a tela e abrila denovo para atualizar a jtable!

ken420

veja como ficou

try
            {
                con_Tabela.resultset.absolute(tb.getSelectedRow()+1);
                String sql = "select * from produto Where codigo = "+(con_Tabela.resultset.getInt("Codigo"))+";";
                String nome = "Deletar o produto : "+con_Tabela.resultset.getString("nome")+" ?";
                    int opcao_escolhida = JOptionPane.showConfirmDialog(null,nome,"Exclusão ",JOptionPane.YES_NO_OPTION);
                    if (opcao_escolhida == JOptionPane.YES_OPTION)
                    {
                        sql = "DELETE FROM produto Where codigo = "+(con_Tabela.resultset.getInt("Codigo"))+";";
                        int conseguiu_excluir = con_Tabela.statement.executeUpdate(sql);
                        if (conseguiu_excluir == 1)
                        {
                            JOptionPane.showMessageDialog(null,"Exclusão realizada com sucesso");

                        }
                     }
                    else
                       return;

            }
            catch(SQLException erro)
            {
                JOptionPane.showMessageDialog(null,"Não localizou dados "+erro);
            }

nao sei pq depois que excluo um registro ele pede se eu quero excluir todos depois faz a pergunta de exclusao para todos registros

ken420

up

V

Ken, para atualizar a tabela te sugiro você excluir todas as linhas da tabela e montar a tabela novamente!

Quanto a exclusão, não sei o que pode estar ocasioinando isso, acho que pode ser o seu evento!
Aonde você está adicionando o evento do mouse?! Deve ser na tabela e não no seu JFrame ok?

Criado 8 de março de 2009
Ultima resposta 10 de mar. de 2009
Respostas 13
Participantes 3