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?

o inicia sesi贸n.

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鈥檛 updating on my program.

private boolean getMovieViewed(PreparedStatement preparedStatement, Connection connection, int id_movie ) {
boolean viewed = false;
String query = 鈥淪ELECT * 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 = 鈥渏dbc: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(鈥渃om.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 = 鈥榤ovie鈥 ) 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