Looping para ir retirando itens

Fiz um loop para quando alguem cancelar um pedido, ele devolta o estoque de cada item novamente para a tabela do produto

resumindo, fica gravado o item do pedido, e sua quantidade, se eu cancelar ele devolve aquela quantidade para o produto, segue anexo como eu fiz e o erro

[code] public void cancelarPedido(){
String id_pedido2 = ednpedido.getText();
String sql = “SELECT * FROM item_pedido WHERE id_pedido = '”+id_pedido2+"’";
try {
con.executeSQL(sql);
con.resultset.first();
do
{

          String insere3SQL = "UPDATE produto SET qtd =`qtd`+ qtd WHERE id_prod IN ( SELECT id_prod "+
                              "FROM item_pedido "+
                              "WHERE id_pedido = '"+id_pedido2+"')";
            try {
                con.statemente.executeUpdate(insere3SQL);
            }
            catch (SQLException ex) {
                        System.out.println("Erro: "+ex.getMessage());
         }
          
          
          String insere6SQL = "DELETE FROM item_pedido WHERE id_pedido = '"+id_pedido2+"'";
          String insere7SQL = "DELETE FROM pedido WHERE id_pedido = '"+id_pedido2+"'";
        try {
            con.statemente.executeUpdate(insere6SQL);
        }
        catch (SQLException ex) {
                    System.out.println("Erro: "+ex.getMessage());
        }  
        try {
            con.statemente.executeUpdate(insere7SQL);
        }
        catch (SQLException ex) {
                    System.out.println("Erro: "+ex.getMessage());
        }    
            
        }while(con.resultset.next());
    } catch (SQLException ex) {
        Logger.getLogger(cad_pedido.class.getName()).log(Level.SEVERE, null, ex);
    }

           cad_pedido.this.dispose();
        }[/code]

Set 23, 2012 1:22:06 PM yamada3.cad_pedido cancelarPedido Grave: null java.sql.SQLException: Operation not allowed after ResultSet closed at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:796) at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6857) at yamada3.cad_pedido.cancelarPedido(cad_pedido.java:411) at yamada3.cad_pedido.canvenActionPerformed(cad_pedido.java:833) at yamada3.cad_pedido.access$500(cad_pedido.java:25) at yamada3.cad_pedido$6.actionPerformed(cad_pedido.java:635) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Retire o comando rs.first(), ele não só não é necessário, como só é possível em resultsets que não são FORWARD_ONLY (o que não é seu caso).
Além disso, troque seu do…while por um while comum.

O ResultSet começa posicionado ANTES do primeiro registro, justamente para poder ser usado assim:

while (rs.next()) { //faz algo }

Outra coisa. O ideal é não fazer concatenação de Strings em consultas SQL.

Isso trás vários problemas:

  • Pessoas podem inserir valores inválidos, como por exemplo, valores que contenham aspas simples;
  • Pior que isso, um atacante poderia inserir uma QUERY, e detornar seu sistema.

Para resolver esse problema, use um PreparedStatement.

PreparedStatement stmt = con.prepareStatement("SELECT * FROM item_pedido WHERE id_pedido=?"); stmt.setInt(Integer.parseInt(id_pedido2)); ResultSet rs = stmt.executeQuery();

Outra coisa, por que id_pedido é uma String? Ids deveriam sempre ser valores numéricos.

Finalmente, vou mover seu tópico para o fórum de persistência. JDBC não é assunto de Java Básico.