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.
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.
Deja una respuesta