Duvida Pacote DAO Remove

Olá Pessoal!!

Estou tendo um probleminha em remover um produto do meu projeto.
Pois clico em remover e ele diz que foi removido com sucesso!
Mas se eu buscar ele novamente ele aparece. :shock:

Código produtodao:

public void remove (produto C) throws SQLException{ String sql = "delete from produto where codigo =?"; PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql); stmt.setString(1,C.getCodigo()); stmt.execute(); stmt.close(); }

Botão Excluir:

[code]
public void excluirproduto() throws SQLException {
int resposta = JOptionPane.showConfirmDialog(this, “Deseja realmente excluir este produto?”,
“Confirmação”, JOptionPane.YES_NO_OPTION);//criar uma tela para perguntar se quer ou não excluir
if (resposta == JOptionPane.YES_NO_OPTION) {
produtodao dao = new produtodao();
produto p= new produto();
p.setCod(jLabelcod.getText());
dao.remove§;
DefaultTableModel dtm = (DefaultTableModel) jTabletabelaproduto.getModel();
dtm.removeRow(jTabletabelaproduto.getSelectedRow());

        }

        if (resposta == JOptionPane.OK_OPTION){

JOptionPane.showMessageDialog(null, “Produto excluido com sucesso”);
jTextFieldproduto.setText("");
jTextFieldmarca.setText("");
jTextFieldmodelo.setText("");
jTextFieldcor.setText("");
jTextFieldgarantia.setText("");
jTextFieldvalor.setText("");
jLabelcod.setText("");

    DefaultTableModel dtm = (DefaultTableModel) jTabletabelaproduto.getModel();
    dtm.removeRow(jTabletabelaproduto.getSelectedRow());


   }else{
      JOptionPane.showMessageDialog(null, "Seu Produto Não Foi excluido");
   }

DefaultTableModel dtm = (DefaultTableModel) jTabletabelaproduto.getModel();
dtm.removeRow(jTabletabelaproduto.getSelectedRow());
}[/code]
O que pode ser?? :?

Ola.
Depois do de executar a operação de o commit.
t+

Desculpe mas ñ intendi :?

a transação do remove está esperando a confirmação (commit) para ser concluída, ou seja, ja está na fila de transações do banco, mas não fez nenhuma persistencia ainda. Pegue o objeto que gerencia a sua conexão (No seu caso é conexao) e execute o commit (conexao.commit():wink: após a execução da query, que sua transação será concluída e efetivada no banco.

victorsp

Poderia ser mais específico sou nova na área e não
compreendi o que vc disse :oops:
Desculpe :oops:

Ola Patricia SS, td blz???

Olha eu acredito que o fato de vc estar recebendo a mensagem de produto removido com sucesso seja desse item:

if (resposta == JOptionPane.OK_OPTION){  
JOptionPane.showMessageDialog(null, "Produto excluido com sucesso");  
.....  
  
       }else{  
          JOptionPane.showMessageDialog(null, "Seu Produto Não Foi excluido");  
       }  

vc esta testando se o botao da interface foi apenas clicado ou nao em “if (resposta == JOptionPane.OK_OPTION)”, ou seja se vc clicar em ok eu presumo, ele dara a mensagem de que o produto foi excluido com sucesso e para sua surpresa nao foi. acredito que o problema esteja quando vc utiliza o :

produto p= new produto();  
            p.setCod(jLabelcod.getText()); 

Utilizando o getText() acredito que vc esteja utilizando o cod do produto como String e nao como Integer
de repente fazendo assim possa resolver o seu problema:

produto p= new produto();  
            p.setCod(new Integer(jLabelcod.getText())); 

Isso tambem se o codigo do produto na classe produto for Integer, alias teria como posta-la para poder analisar mais de pertoo seu problema???

Abracao
Max

Blz,
Vamos la então! A explicação do victorsp detalha o processo de commit.
Assim vc pode implementar desta forma o metodo de remoção.

public void remove (produto C) throws SQLException{ String sql = "delete from produto where codigo =?"; PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql); stmt.setString(1,C.getCodigo()); stmt.execute(); stmt.commit(); //<-- Aqui vc esta confirmando para o banco que o item pode ser removido stmt.close(); }

Qualquer coisa é so falar.
t+

quebrado

Intão eu coloquei esse commit,ma ficou errado.
Tenho que colocar ele em algum outro lugar? :shock:

Patricia, o código que você colocou está correto.
Qual o banco de dados que você está utilizando?
Todas os meus métodos de deletar, usando JDBC (Oracle, MySQL e MSSQL Server) são assim.
Nunca precisei colocar o commit para qualquer query

Olá drsmachado

Estou usando o MySQL.

Se eu colocar o commit ele fica errado :?

Ah, sim, modifique teu método, coloque a parte da exclusão entre o try/catch

public void remove (produto C) throws SQLException{  
try{
        String sql = "delete from produto where codigo =?";  
        PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);  
        stmt.setString(1,C.getCodigo());  
        stmt.execute();  
        stmt.close();    }catch(Exception e){
e.printStackTrace();
}  

Como você está “jogando” o erro com throws, não sabe se está ou não conseguindo criar a conexão, ir ao banco e executar a query. Mas, como o usuário selecionou “Ok”, ele irá informar que deletou com sucesso.

drsmachado

Obrigado pela ajuda!
Mas ainda não exclui :?

Desculpe o incomodo!!

Ok, mas ele cai na exception ou executa?

Cm assim? :shock:

É assim do lado do meu painel excluir tem outro com a tabela para
pesquisar!!
Eu clico p/pesquisar na tabela excluo ele e ele some da tabela!
Mas se eu pesquisar novamente ele volta!!

:evil:

Ele irá sumir da tabela, pois você tem uma parte do programa que faz isto. Certo?

 dtm.removeRow(jTabletabelaproduto.getSelectedRow());

Porém, se você colocou o try/catch e observar no console da IDE, poderá ver se ele dá um erro ou se executa normalmente o código.

Ao excluir [tentar] da esse erro:

Conectando ao banco Conectando ao banco Conectando ao banco Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: -1 at java.util.Vector.removeElementAt(Vector.java:515) at javax.swing.table.DefaultTableModel.removeRow(DefaultTableModel.java:446) at projetofinalpatriciass.excluirproduto.excluirproduto(excluirproduto.java:442) at projetofinalpatriciass.excluirproduto.jButtonexcluirprodutoActionPerformed(excluirproduto.java:319) at projetofinalpatriciass.excluirproduto.access$000(excluirproduto.java:27) at projetofinalpatriciass.excluirproduto$1.actionPerformed(excluirproduto.java:113) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6288) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6053) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4651) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4481) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4481) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643) at java.awt.EventQueue.access$000(EventQueue.java:84) at java.awt.EventQueue$1.run(EventQueue.java:602) at java.awt.EventQueue$1.run(EventQueue.java:600) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$2.run(EventQueue.java:616) at java.awt.EventQueue$2.run(EventQueue.java:614) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:613) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) Conectando ao banco

Já estamos começando a evoluir.
Porém, esse erro acontece depois da chamada ao método de deleção.
Deve haver algo antes.
Aliás, o erro referido diz que não foi possível deletar a linha.

kkk eu ja estou pensando em desistir :x

cm assim algo antes?

Olhe a sequencia, você instancia o DAO, chama o método para remover e só depois disso, remove a linha (ou tenta)

produtodao dao = new produtodao();  
            produto p= new produto();  
            p.setCod(jLabelcod.getText());  
             dao.remove(p);  
             DefaultTableModel dtm = (DefaultTableModel) jTabletabelaproduto.getModel();  
             dtm.removeRow(jTabletabelaproduto.getSelectedRow());  

Para que ele não delete, pode estar acontecendo um erro antes da chamada ao método removeRow.

[quote=Patricia SS]kkk eu ja estou pensando em desistir :x

cm assim algo antes?[/quote]

Só acrescentando, o erro é basicamente isso aqui:

suaList.add(0);
suaList.add(1);
suaList.remove(2);

O que há de errado? Você tem dois elementos na lista e tenta remover o da posição três (lembre-se, inicia-se em 0, portanto, 0-1-2), e gera aquela exceção.
Por isso o machado disse que pode ser algo antes do remove :smiley:

Abraços.