Tengo un buscador de productos implementado con java (javafx) y mysql, es muy simple, detecto el texto introducido en un textfield y va buscando en la base de datos con like conforme va escribiendo. Hasta ahí todo bien y sencillo. El problema me lo encuentro al mejorar la accesibilidad del usuario, os explico, tengo relacionado los productos con Marcas y Categorías a través de ID, y para que no se vea feo la tabla con números en las columnas Marca y Categoria he creado un método que obtiene el nombre de las categorías por el ID. Hasta ahí entiendo que todo es lógico. Pero me encuentro en la tesitura que para buscar por Categoría o Marca, tengo que realizar una búsqueda previa de los ID a través del nombre de las categorías y esto afecta gravemente al rendimiento.
¿Qué solución aplicariais?, os paso el código
Código:
// Busco al escribir tfBuscarProducto.setOnKeyReleased ((KeyEvent ke) -> { // Indico que buscar String valor = tfBuscarProducto.getText(); // Indico que campo buscar String campo = null; // Verifico que haya un texto a buscar if (!"".equals(valor)) { try { // Instancio la clase ProductoDAO pd = new ProductoDAOImpl(); if (rbBuscarProductoPorId.isSelected()) { campo = "producto_id"; listaProducto = pd.buscarProductoPorSeleccion(campo, valor); } else if (rbBuscarProductoPorNombre.isSelected()) { campo = "producto_nombre"; listaProducto = pd.buscarProductoPorSeleccion(campo, valor); } else if (rbBuscarProductoPorMarca.isSelected()) { // Instancio la clase MarcaDAO md = new MarcaDAOImpl(); // Almaceno las marcas listaIdMarcas = md.buscarIdMarcaPorNombre(valor); // Recorro los id for (int i = 0; i < listaIdMarcas.size(); i++) { // añado los productos listaProducto.addAll(pd.buscarProductoPorMarca(listaIdMarcas.get(i))); } } } catch (SQLException ex) { Logger.getLogger(ProductosControlador.class.getName()).log(Level.SEVERE, null, ex); } } } );