Persistencia de Datos en Aplicaciones de Películas

Clase 29 de 40Curso Avanzado de Java SE

Resumen

¿Cómo podemos persistir el estado de las películas vistas en nuestra aplicación?

En una aplicación donde gestionamos bibliotecas de medios, como películas, series y libros, una funcionalidad crucial es la de guardar el estado de los elementos visualizados para recordar qué contenido ya ha sido consumido. Este estado debe ser persistente, es decir, debe almacenarse de manera que no se pierda al cerrar la aplicación. En este artículo, exploraremos cómo implementar esta lógica utilizando SQL y estructuras de tabla para asegurar que el marcado de "visto" de una película sea persistente.

¿Cuál es la estructura de la tabla necesaria?

Para lograr la persistencia de los datos, necesitamos una tabla en nuestra base de datos capaz de almacenar información acerca de qué contenido ha visto el usuario. Aquí presentamos los campos básicos que debe tener la tabla viewed:

  • Identificador de la tabla viewed: Principalmente para el manejo interno.
  • Identificador del usuario: Determinará quién ha visto qué material.
  • Tipo de material (material): Identificador que diferencia películas, series, capítulos, etc.
  • Identificador del elemento (elemento): Cada película, serie o capítulo tendrá un identificador único.

Estos datos nos permitirán identificar exactamente qué material ha sido visualizado por cada usuario.

¿Cómo manejar las consultas SQL para recuperar el estado de los elementos vistos?

Una parte crítica del proceso es ejecutar consultas SQL que permitan verificar si un elemento ya ha sido visto. Para lograr esto, podemos implementar un método en nuestro código que recupere el estado desde la tabla viewed. Utilizaremos declaraciones preparadas (prepared statements) para evitar problemas de inyección SQL y asegurar el funcionamiento adecuado de las consultas.

boolean getMovieViewed(int movieId) {
    boolean isViewed = false; // Variable bandera
    String query = "SELECT * FROM viewed WHERE id_material = ? AND id_element = ? AND id_user = ?";
    
    try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
        preparedStatement.setInt(1, 1); // Material type for movies
        preparedStatement.setInt(2, movieId); // Movie identifier
        preparedStatement.setInt(3, 1); // User identifier

        ResultSet rs = preparedStatement.executeQuery();

        if (rs.next()) {
            isViewed = true;
        }

    } catch (SQLException e) {
        e.printStackTrace(); // Manejo de errores
    }
    return isViewed;
}

¿Cómo asegurar que el estado del elemento sea visible al usuario?

Para que los cambios se reflejen adecuadamente en la aplicación, debemos actualizar el objeto que representa la película, serie o libro, usando el método setViewed y llamar al método getMovieViewed siempre que se incite a mostrar el estado "visto" de un elemento.

movie.setViewed(getMovieViewed(movie.getId()));

Implementando esta lógica, cada vez que abramos la aplicación, el estado de visión del usuario sobre el contenido estará correctamente cargado, mejorando la experiencia del usuario y facilitando la gestión de contenido visto.

¿Qué debemos hacer para insertar datos a la tabla Vuido?

Para completar el proceso, es necesario implementar formas de agregar entradas a la tabla viewed cuando un usuario vea un nuevo contenido. Esto nos asegurará que la visualización del contenido se registre correctamente para futuras referencias y filtros. En nuestro siguiente paso, exploraremos cómo implementar esa funcionalidad.