Formación informática

Java | Joomla | MySQL

Curso de Java - Tema 32.4.1: realización de consultas de selección sobre una tabla con filtrado de datos

¿Sabes dónde está Chinchón?

La consulta SQL que tenemos que usar para obtener la respuesta de la base de datos es la instrucción select y, al menos, la claúsula where para realizar el filtrado de los datos. Aunque también pueden agruparse y hacer otras operaciones. Si tienes dudas sobre la sintaxis de la instrucción SQL te recomiendo que acudas al manual de SQL mediante este enlace.

En la clase ManejadorDb tenemos que escribir un método con uno o varios parámetros con el tipo de dato adecuado coincidentes con los campos dónde vamos a realizar el filtrado de los datos, que nos devuelva la consulta haciendo uso del JavaBean correspondiente en caso de consultas sobre una tabla y objetos de tipo colección. Para ello usaremos:

  1. El método conector que hemos creado anteriormente para realizar la conexión con la base de datos.
  2. Una o varias variables de tipo String para almacenar el valor o valores que queremos usar en nuestra consulta para filtrar los resultados.
  3. El JavaBean que representa a la tabla para almacenar y mostrar cada línea devuelta por el objeto ResultSet.
  4. Un objeto de tipo colección para mostrar los resultados de la consulta usando el JavaBean.
  5. La interface Statament para ejecutar la consulta y obtener el valor devuelto por la base de datos. Usaremos el método executeQuery para ejecutar la consulta almacenada en la variable y que nos devuelva un objeto.
  6. La interface ResultSet para convertir en una tabla el resultado de la consulta devuelto por el método executeQuery de la interface Statement. Esta interface mantiene un cursor de avance que apunta al registro correspondiente de la base de datos, que inicialmente apunta a la fila cero. El método next mueve el cursor a la siguiente fila y devuelve false cuando el objeto ResultSet ha alcanzado el final del resultado devuelto por la consulta. Mediante un bucle while, usando el método next realizamos el tratamiento del resultado devuelto.
  7. Dentro del bucle, usaremos los métodos get de cada tipo de dato que tiene la clase ResultSet para recuperar los datos de la tabla, al que indicaremos el nombre del campo del cuál vamos a recuperar los datos. ResultSet, que usaremos a continuación.
  8. Por último, no hay que olvidarse de liberar los recursos usados cerrando todos los objetos que hemos usado durante el proceso.

En el método main usaremos el método creado para recuperar los datos que cumplan con el criterio que le pasamos como argumento.

Suponiendo que hemos seguido el proceso de todo este ejemplo y tenemos creado el método conector, la sintaxis generíca del método de la clase ManejadorBaseDatos sería:

	public JavaBean nombreMetodo(tipo_dato atributo) {
		/* Objeto JavaBean de la tabla para almacenar los valores devueltos*/
		JavaBean identificador = null;
		/*El primer paso es crear la conexión y comprobar que existe*/
		Connection conexion = conector();
		if ( conexion != null) {
			try {
			/*Creamos la conexión para lanzar la consulta y la ejecutamos*/
			Statement consulta = conexion.createStatement();
			String sql = "select * from x where campo='" + variable + "'";
			ResultSet resultado = consulta.executeQuery(sql);
			while (resultado.next()) {
			objetoJavaBean = new JavaBean(
				resultado.getInt("campo_numérico"),
				resultado.getDouble("campo_numérico_con_decimales"),
				resultado.getString("campo_de_varchar_"),
				); 
			}
			//Liberamos los recursos usados cerrando todos los objetos usados
			resultado.close();
			consulta.close();
			conexion.close();
			} catch (SQLException ex) {
				System.out.println(ex.getMessage());
			}
	}
	return objetoJavaBean;
}

Mientras que en la clase principal tenemos que incluir el siguiente código, suponiendo que ya tenemos instanciado un objeto de la clase ManejadorBaseDatos cómo mbd:

        ArrayList nombre = mbd.nombreMetodo();
        /* Mostramos por pantalla el contenido de la tabla*/
        System.out.println("--- Mensaje informativo ---");
        if (nombre.size() > 0 && nombre!=null) {
            for (JavaBean variable: nombre) {
                System.out.println(JavaBean.toString());
            }
        }else  {
            System.out.println("La base de datos no ha devuelto datos");
        }

De acuerdo a esto, si queremos buscar las Provincias de España cuyo nombre contiene la letra b, tenemos que escribir el siguiente método en la clase ManejadorBaseDatos:

   public ArrayList provinciasConB() {
        /* Instanciamos un ArrayList que guardará objetos de la clase Comunidad*/
        ArrayList provinciasConB = new ArrayList>();
        /* Realizamos la conexión con la base de datos usando el método conector*/
        Connection conexion = conector();
        /* Usamos una variable de tipo String para almacenar el valor para el 
			filtrado*/
        String filtrado = "%b%";
        /* Comprobamos si existe la condición para realizar el tratamiento adecuado*/
        if (conexion != null) {
            try {
                /* Creamos la conexión para lanzar la consulta*/
                Statement consulta = conexion.createStatement();
                /* Creamos la consulta sql en una variable de tipo String*/
                String sql = "SELECT * FROM provincia WHERE Provincia LIKE'" + 
						  filtrado + "'";
                /* Ejecutamos la consulta y recuperamos los datos*/
                ResultSet resultado = consulta.executeQuery(sql);
                while (resultado.next()) {
                    /* Guardamos en una variable temporal los resultados*/
                   String codigoComunidad = resultado.getString("CODAUTO");
                   String codigoProvincia = resultado.getString("CPRO");
                   String provincia = resultado.getString("Provincia");
                   /* Instanciamos un objeto de tipo Comunidad con los datos 
							 devueltos por la base de datos*/
                Provincia p = new Provincia(codigoComunidad, codigoProvincia, 
						 provincia);
                   /*Guardamos los datos del objeto en el ArrayList */
                   provinciasConB.add(p);
                }
                /*Para liberar recursos cerramos los objetos*/
                resultado.close();
                consulta.close();
                conexion.close();

            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
        } else {
            System.out.println("Conexión no disponible. Compruebe los datos");
        }
        return provinciasConB;
    }

Y en método principal de la clase principal tenemos que escribir:

ArrayList provinciasConB = mbd.provinciasConB();
/* Mostramos por pantalla el contenido de la tabla*/
System.out.println("--- Listado de Provincias de España cuyo nombre tiene una 
letra b ---");
if (provinciasConB.size() > 0 && provinciasConB !=null) {
	for (Provincia provincia : provinciasConB) {
		System.out.println(provincia.toString());
		}
}else  {
	System.out.println("La base de datos no ha devuelto datos");
}

Curso de Java - Tema 32.4: realización de consultas SQL con variables Java | Curso de Java - Tema 32.4.2: realización de consultas de selección sobre varias tablas con filtrado de datos
Curso de Java - Índice Ejercicios Nivel Medio

Escribir un comentario

Aunque los comentarios no expresan la opinión del administrador del sitio web, éste si que tiene una responsabilidad legal sobre lo que aparece. Por lo tanto, habrá una labor de moderación de los mensajes. No se permitirán mensajes ofensivos ni publicidad


Código de seguridad
Refescar

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-Ley 13/2012, de 30 de marzo. Si continúa navegando consideramos que acepta el uso de cookies. . Más información