Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/02/2017, 02:38
maurikius1983
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años, 1 mes
Puntos: 0
Buscador Java

Hola a todos, tengo una duda existencial:
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);
            }
        }

    }

);