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.
Introducción al Curso
Bienvenidos al Curso Avanzado de Java SE
Clases avanzadas
Clases Abstractas
Implementando clases abstractas al proyecto
Ejercicio. Clases Abstractas
Implementando métodos abstractos en Java
JavaDocs
Qué es JavaDocs
Implementando JavaDocs al proyecto
Reto
JavaDocs tags para herencia e interfaces
Generado Java Docs
Clases Anidadas
Clases anidadas y tipos
Ejercicio. Clases Anidadas
Implementando una clase anidada al proyecto
Instanciando clases estáticas anidadas
Enumerations
Interfaces Avanzadas
Métodos con implementación métodos default y private
Creando Interfaz DAO con métodos default y private
Ejercicio. Interfaz DAO
Diferencia Interfaces y Clases Abstractas
Herencia en Interfaces
Colecciones Avanzadas
Map, HashMap, TreeMap y LinkedHashMap
Excepciones
Manejo de errores
Try-catch-finally / Try-with-resources
JDBC
Definición y composición del API
Ejercicio. JDBC API
Creando la base de datos y conectando el proyecto con MySQL
Generando conexión a la base de datos y creando clase de constantes
Sentencia SELECT en Java
Sentencia SELECT con Parámetros
Sentencia INSERT en Java
Reto: Reporte por fecha
Lambdas
¿Cómo resolver el reto: reporte por fecha?
Interfaces funcionales
Programación Funcional
Lambdas
Ejercicio. Lambdas
Lambdas como variables y Recursividad
Stream y Filter
Predicate y Consumer
Fin del Curso
Conclusión del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Anahí Salgado Díaz de la Vega
Aportes 21
Preguntas 6
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?