Author Topic: No puedo eliminar el último registro creado en BBDD  (Read 215 times)

Jaia

  • Newbie
  • *
  • Posts: 7
  • Karma: 0
    • View Profile
No puedo eliminar el último registro creado en BBDD
« on: Marzo 15, 2019, 08:41:34 am »
Hola:

Tengo un problema con la base de datos, que después de darle vueltas creo que el error no es de mi código sino de la base de datos, pero no estoy seguro.

El caso es que, después de agregar un registro desde la aplicación, ningún problema ahí, cuando quiero eliminar ese mismo registro no lo hace. Connection.executeUpdate() retorna 0. Si voy a otro registro de la tabla, me lo borra sin problemas.

Si cierro y abro la aplicación para borrar ese último registro , entonces sí me deja hacerlo. No veo el fallo.

Code: [Select]
    private void eliminar() {
        Producto p = tabla.getSelectionModel().getSelectedItem();
        if (p != null) {
            Cargar.cargarEliminarProducto(p);
            EProducto cont = (EProducto) Cargar.getControladorActual();
            try {
                if (cont.getRespuestausuario() == 1) {
                    VentaIDs v = Ventas.getVentasPorIdProducto(p.getId().get());
                    if (v != null) {
                        alertaAsociada(ParseDates.getFecha(v.getFventa().get()));
                    } else {
                        if (Productos.eliminarProducto(p)) { // <- Aquí está la chicha
//                        Productos.eliminarProducto(p);
                        alertaOk();
                        listaProductos.remove(p);
                        rellenarTabla();
                        tabla.getSelectionModel().clearSelection();
                        } else {
                            throw new SQLException();
                        }
                    }
                }
            } catch (SQLException ex) {
                alertaSQL();
                System.out.println("EX: " + ex.getCause() + " -> " + ex.getMessage());
                Logger.getLogger(PProductos.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                // CREAR UN LOG DE INCIDENCIAS
                alertaGrave();
                Logger.getLogger(PProductos.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            alertaSeleccion();
        }
    }

Este método se acciona tras pulsar el botón eliminar. Lanza la vista fx, carga el controlador, se pasan los parámetros sin problemas de un sitio a otro ... todo bien.
El if llama a un método estático que se conecta con la base de datos, y debe retornar un boolean tras ejecutar las sentencias, que son estas:

Code: [Select]
    public static boolean eliminarProducto(Producto p) throws SQLException, ClassNotFoundException {
        if(p != null) {
            System.out.println("Tabla: " + TABLA);
            String sql = "delete from " + TABLA
                    + " where " + ConfigDB.getCampos(TABLA).get(0) + " = ?";
            System.out.println(sql);
            PreparedStatement pstm = ConnDB.getConn().prepareStatement(sql);
            pstm.setInt(1, p.getId().get());
            int res = pstm.executeUpdate();
            System.out.println("DEL PRODUCTO: " + res);
            return res == 1;
        }
        return false;
    }

Las tablas están bien, las consultas son correctas. Pienso que podría ser algo de la base de datos y no sé si puedo hacer algo.

Alguna idea? Gracias.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5455
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: No puedo eliminar el último registro creado en BBDD
« Reply #1 on: Marzo 15, 2019, 08:13:19 pm »
Hola:
No sé qué base de datos estás usando, pero si es una de las de toda la vida (postgres, mysql, oracle, mariadb ... ) casi al 100% que el problema es tú código.

Mira con debugger, en el método eliminar que el id del producto que quieres borrar está bien relleno y ese id está en la base de datos.

Un saludo.

Jaia

  • Newbie
  • *
  • Posts: 7
  • Karma: 0
    • View Profile
Re: No puedo eliminar el último registro creado en BBDD
« Reply #2 on: Marzo 16, 2019, 01:01:13 am »
Hola:

La base de datos ahora mismo es MariaDB, pero pienso cambiarla por SQLite. Es posible que un futuro incluya otras bases de datos.

En cuanto a la cuestión en sí, tienes toda la razón. Te cuento:

La base de datos tiene un ID autoincremental, y al ingresar el producto meto todos los campos necesarios menos el ID. Esto funciona, pero claro, hasta que no hago una lectura completa de todo los registros físicos en la base de datos, estoy trabajando con productos en memoria (que no tienen ID). Es por esto que al intentar eliminar el registro sin cerrar la aplicación la consulta me retornaba 0.

Fallos de novato supongo.

Muchas gracias.
« Last Edit: Marzo 16, 2019, 01:04:20 am by Jaia »

 

ey