No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso Avanzado de Java SE

Curso Avanzado de Java SE

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Sentencia SELECT con Parámetros

29/40
Recursos

Aportes 21

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Si quieren entender mejor esto de las bases de datos recomiendo ir al curso de fundamento de bases de datos de platzi como yo lo hice y entenderán mejor de lo que habla ann.

Vamos bien, entendí perfecto, gracias anncode

Si tienen problemas con el error acerca de la zona horaria pueden configurarla en MySQL con

SET GLOBAL time_zone = “-5:00”
-5 para Colombia.

tengo problemas con persistencia, no mantiene la informacion vista

Tengo un par de dudas que espero me respondan:

Hay algun problema en declarar un nuevo PreparedStatement dentro del metodo getViewed()? Ya que no veo la razon de pasar por paramtro si se inicializa nuevamente dentro del metodo.

Mi otra duda es, Cuando se agrego el metodo setID() a la clase Movie?, Ann habia dicho que no se debia asignar el id de manera manual y quito todos los metodos setID(). Esto no incurre en alguna falla de diseno?

Recomiendo usar mysql Workbench y pasar por el curso de fundamentos de base de datos.

Excelente clase muy buena explicación

double check the fields on MovieDAO , i used one more extra field and thats the reason that it wasn’t updating on my program.

private boolean getMovieViewed(PreparedStatement preparedStatement, Connection connection, int id_movie ) {
boolean viewed = false;
String query = “SELECT * FROM " + TVIEWED + //generating query
” WHERE " + TVIEWED_IDMATERIAL + “= ?” + // start working with filters
" AND " + TVIEWED_IDELEMENT + “= ?” +
" AND " + TVIEWED_IDUSER + “= ?” ;

Muy buena clase.

excelente clase !!!1

cual es la funcion que realiza la instruccion setID(…), dentro de la funcion read() de la clase MovieDao ?

Excelente curso

Estupenda clase instructora Anahí, que claro el uso de parámetros a través de este tipo de consulta.

@anncode me quede varado en en este video debido a que a mi el xampp no me funciona como a ti, toco poner el puerto localhost:8080 , pero mi duda seria en esta linea .

public static final String URL = “jdbc:mysql://localhost:8080:3306/”;

al tener el puerto 8080 y no el 8000 como hago la conexión y estoy usando java 11 esta linea estaría correcta??

Class.forName(“com.mysql.cj.jdbc.Driver”);

Quedo atento a tus respuestas.

Acá dejo mi versión del código, en el método getMovieViewed() yo estoy obteniendo los datos de id_material y id_user mediante consultas anidadas (select). El query funcional me quedo así:

SELECT * FROM viewed WHERE id_material = ( SELECT id FROM material WHERE name = ‘movie’ ) AND id_element = 6 AND id_user = ( SELECT id FROM user )

Adicionalmente utilicé el metodo String.format() para armar los queries y que me facilitara la legibilidad.

String query = String.format("SELECT * FROM %s WHERE %s = ( SELECT %s FROM %s WHERE %s = '%s' ) AND %s = ? " +
                "AND %s = ( SELECT %s FROM %s )", TVIEWED, TVIEWED_ID_MATERIAL, TMATERIAL_ID, TMATERIAL,
                TMATERIAL_NAME, TMOVIE, TVIEWED_ID_ELEMENT, TVIEWED_ID_USER, TUSER_ID, TUSER);

Esta es mi clase MovieDAO

package com.erosennin.amazonviewer.dao;

import com.erosennin.amazonviewer.db.IDBConnection;
import com.erosennin.amazonviewer.model.Movie;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import static com.erosennin.amazonviewer.db.DataBase.*;

public interface MovieDAO extends IDBConnection {

    default ArrayList<Movie> read() {
        ArrayList<Movie> movies = new ArrayList<>();
        try(Connection connection = connectDB()) {
            String query = String.format("SELECT * FROM %s", TMOVIE);
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                Movie movie = new Movie(
                        resultSet.getInt(TMOVIE_ID),
                        resultSet.getInt(TMOVIE_DURATION),
                        resultSet.getString(TMOVIE_TITLE),
                        resultSet.getString(TMOVIE_GENRE),
                        resultSet.getString(TMOVIE_CREATOR),
                        resultSet.getShort(TMOVIE_YEAR));
                movie.setViewed(getMovieViewed(connection, resultSet.getInt(TMOVIE_ID)));
                movies.add(movie);
            }
        } catch(SQLException e) {
            e.getMessage();
        }
        return movies;
    }

    default Movie setMovieViewed(Movie movie) {
        return movie;
    }

    private boolean getMovieViewed(Connection connection, int idMovie) {
        String query = String.format("SELECT * FROM %s WHERE %s = ( SELECT %s FROM %s WHERE %s = '%s' ) AND %s = ? " +
                "AND %s = ( SELECT %s FROM %s )", TVIEWED, TVIEWED_ID_MATERIAL, TMATERIAL_ID, TMATERIAL,
                TMATERIAL_NAME, TMOVIE, TVIEWED_ID_ELEMENT, TVIEWED_ID_USER, TUSER_ID, TUSER);
        boolean viewed = false;
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setInt(1, idMovie);
            ResultSet resultSet = preparedStatement.executeQuery();
            viewed = resultSet.next();
        } catch (SQLException e) {
            e.getMessage();
        }
        return viewed;
    }
}

No usen XAMPP, en vez de eso usen MySQL installer que traer todo para SQL out of the box.

Técnicamente esta corriendo bien mi conexión con la base de datos, pero mi duda cae en que me esta saliendo esta excepción:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘? AND id_element = ? AND id_usuar = ?’ at line 1

Cual es la forma correcta de llamar las variables en MariaDB? (asumo ese es el error) muchas gracias de antemano comunidad 😄

Super gracias 😃

Bueno pense que si corria el codigo y veia una pelicula se guardaria, pero nada, lo hizo directamente desde el localhost jejeje. Vere si mas adelante muestra.

¡Hola! no es necesario que reutilices el preparedStatement ya que lo estás reasignando en el método getMovieViewed, lo mejor es crear un nuevo objeto ya que le da más legibilidad a tu código.

bien entendí la explicación