Como filtrar usando predicados en una base de datos DB4O

Hola a todos, hoy os voy a explicar como podemos filtrar usando predicados en una base de datos DB4O.

En DB4O, es muy posible que necesitemos personalizar un filtro para devolver objetos.

Lo primero que necesitarás es el JAR de DB4O, podéis agregar la dependencia en apache netbeans. Aquí lo puedes descargar.

Ya tenemos un manual hablando sobre el tema de filtros, pero era un filtro más simple.

Como filtrar objetos en una base de datos DB4O

Vamos a usar la siguiente clase Persona algo más simplificada.


public class Persona {

    private String nombre;
    private int edad;

    public Persona(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }

    @Override
    public String toString() {
        return "Persona{" + "nombre=" + nombre + ", edad=" + edad + '}';
    }
    
}

Para filtrar datos, podemos crear una instancia de Predicate y crear la función match donde le damos la condición que queramos. Veamos un ejemplo:


List<Persona> personas = baseDatos.query(new Predicate<Persona>() {
    @Override
    public boolean match(Persona p) {
        return p.getEdad() > 35 && p.getNombre().equalsIgnoreCase("Fernando");
    }
});

Esto nos devolverá una lista de personas que cumplan esa condición

Os dejo un ejemplo completo:


import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.query.Predicate;
import java.io.File;
import java.util.List;

public class Principal {

    public static void main(String[] args) {
        File fichero = new File("baseDatos");
        fichero.delete();
        // Creamos la base de datos
        ObjectContainer baseDatos = Db4oEmbedded.openFile("BDPersonas");
        baseDatos.store(new Persona("Fernando", 32));
        baseDatos.store(new Persona("Nando", 30));
        baseDatos.store(new Persona("Alberto", 25));
        baseDatos.store(new Persona("Alfredo", 32));
        baseDatos.store(new Persona("Fernando", 40));
        baseDatos.store(new Persona("Samuel", 45));
        
        // Buscamos a la persona llamada Fernando con mas de 35 años
        List<Persona> personas = baseDatos.query(new Predicate<Persona>() {
            @Override
            public boolean match(Persona p) {
                return p.getEdad() > 35 && p.getNombre().equalsIgnoreCase("Fernando");
            }
        });
        
        // Mostramos los resultados
        for (Persona p:personas) {
            System.out.println(p);
        }

        // Cerramos la base de datos
        baseDatos.close();
    }
    
}

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *