Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

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 en Java

28/39
Recursos

Aportes 57

Preguntas 11

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Malo el vídeo, me perdí, como siempre se trata de ir con afán sin el objetivo de ir lo más claro posible para el entendimiento de los que estamos aprendiendo.

EXCELENTE!
Pasos para aprender a programar en Java y no frustarte en el trayecto (despues de ver este video)

1.Seguir los videos con atencion de anncode.
	If (hay error?)
		Busca en los comentarios
		If ( error no encontrado?)
			StackOverflow
			If ( error persiste? RARISIMO QUE ESTO PASE)
				Googlea otras paginas
				If (error sigue persistiendo?)
					Aprende Ingles
					StackOverflow o Google en ingles
					If (error sigue persistiendo?)
						break; // Vas a tener que esforzarte mas o dejar esto...
	else
		Continua!

Quiero compartir un error estúpido que no me traía nada desde la BD:
String query = “SELECT * FROM” + TMOVIE; (* No trae nada por que no hay espacio entre from y la doble comilla)

String query = "SELECT * FROM " + TMOVIE; (*Ahora si funciona con el espacio 😄 😄)

para todos los que usen el conector 8.0 para arriba
en “Class.forName” usen “com.mysql.cj.jdbc.Driver” en vez de "com.mysql.jdbc.Driver"
es importante agregar el “serverTimezone=XXXXX”

XXXX el UTC correspondiente a su horario “UTC” es el default

Quiero comentarles 2 errores que me ocurrieron:

  1. Ejecutando el programa, al querer seleccionar movies en el menú principal:
java.lang.ClassNotFoundException: com.mysql.jdbc.Drive

Revisé e hice de todo lo que se me ocurrió para ver porque pasaba y me terminé dando cuenta que había escrito mal está linea de la interfaz “IDBConnection”:

Class.forName("com.mysql.jdbc.Driver);

Me faltaba agregar la “r”, para asi llamar a la clase Driver.

  1. Al seleccionar las movies en el menú principal me ingresaba en el menú de movies pero no me generaba ningún elemento. Era porque me faltaba agregar un espacio en la sentencia SQL de la interfaz MovieDAO, justo después del FROM:
String query = "SELECT * FROM " + TMOVIE;

Conclusión: hay que ser muy detallista, tener paciencia cuando depuramos el código y leer los aportes de los compañeros, porque de la gran cantidad de veces que los he leído me han aportado muchísimo.

Se que soy muy insistente pero, una vez mas, es la forma correcta es Viewable, no Visualizable.

En el salto que hay en el video,ademas del codigo del while para llenar el objeto Movie, tambien falta la implementacion de la Interfaz MovieDAO en la calse Movie.

Para que aparezca el metodo read() de la Interfaz MovieDAO, primero tienen que implementar la Interfaz en su clase Movie, les quedaría algo como: public class Movie extends Film implements IVisualizable, MovieDAO { #Todo su codigo }

hola me ayuda con este error.
por favor.

<java.lang.ClassNotFoundException: com.mysql.jdbc,Driver
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)>

saludos a todos, pregunta a alguien le sale el siguiente error al ejecutar

Wed Dec 05 22:03:09 COT 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
se establecio la conexion
Wed Dec 05 22:03:11 COT 2018 WARN: Caught while disconnecting...

EXCEPTION STACK TRACE:



** BEGIN NESTED EXCEPTION ** 

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
	at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:645)
	at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:624)
	at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:2249)
	at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4232)
	at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1472)
	at com.yefer.amazonviewer.dao.MovieDAO.read(MovieDAO.java:46)
	at com.yefer.amazonviewer.model.Movie.makeMoviesList(Movie.java:75)
	at Main.<clinit>(Main.java:105)


** END NESTED EXCEPTION **```

el programa se ejecuta correctamente pero al iniciar el Java Application salata ese error 

tuve el siguiente error :
java.sql.SQLException: The server time zone value ‘Hora est. Pac?fico, Sudamerica’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the ‘serverTimezone’ configuration property) to use a more specific time zone value if you want to utilize time zone support.

Corresponde a la configuración de la Zona horaria, para solucionarlo le agregue a la URL [?serverTimezone=UTC]
dejando la conexión completa de la siguiente manera

public String url=“jdbc:mysql://localhost:3306/nombreDB?serverTimezone=UTC”;

Otra manera para obtener los datos en while(rs.next()) es…

default ArrayList<Movie> read(){
		ArrayList<Movie> movies = new ArrayList<Movie>();
		PreparedStatement pst = null;
		ResultSet rs = null;
		try(Connection connection = connectToDB()){
			String query = "select * from "+TMOVIE;
			pst = connection.prepareStatement(query);
			rs = pst.executeQuery();
			while(rs.next()) {
				Movie m = new Movie(rs.getString(2),
						rs.getString(3), rs.getString(4),rs.getInt(5),
						rs.getShort(6));
				m.setId(rs.getInt(1));
				movies.add(m);
			}
		}catch(SQLException e) {
			System.out.println(e.getMessage());
		}
		return movies;
	}

DONDE LOS NUMEROS INDICAN EL NRO DE COLUMNA QUE QUEREMOS OBTENER Y EL rs,get[Tipo]([nro columna]) regresa el valor esperado de esa columna.

me lo tire 3 meses en esto y borre algo que que frustante , na.

HOLA : Tengo este error. ----->A Java Exception has ocurred ---- Ayuda plis

a, b ,c …t, u v z, no parce.😃

Logre solucionar el error Access denied for User ‘amazonviewer’@‘localhost’.

Este proyecto lo trabaje con Xampp y lo que hice fue darle privilegios al usuario amazonviewer desde el usuario phpmyadmin.

Cuando me encontraba con el usuario phpmyadmin, fui a la pestaña cuentas de usuario y seleccione editar privilegios de amazonviewer, nos lleva a una nueva ventana y le seleccionamos todos los campos vacíos y damos clic en continuar(esto para dar todos los privilegios al usuario amazonviewer)

Ejecute nuevamente el proyecto y me mostro las películas que tenía en la base de datos sin generar ningún error.

Espero les ayude.

Saludes.

IMPORETANTISIMA ESTA ACLARACIÓN (creo que la tutora no debería ir tan rápido y mas bien tomarse el tiempo necesario para explicar estas cosas):

Es posible desde la clase o interfaz que implementa a otra interfaz, llamar de manera directa los métodos default de la interfaz padre, por ejemplo la clase “Movie” puede hacer llamado DIRECTO del método “read” de la interfaz QUE IMPLEMENTA (MovieDAO).

Para el ejemplo que explica la tutora, NO ES POSIBLE hacerlo ya que es un contexto ESTATICO (MÉTODO ESTATICO) y por eso debe declarar una objeto de tipo “Movie”.

Y no seria mejor crear clases VO para el mapeo de las tablas?

Vaya Vaya… Sin ningun Error.! 😃

Muy buena clase.
Solo un comentario, el estudio de peliculas animadas se llama Pixar, no Pixart.

Excelente ! 😲😎

excelente clase!!!

Como soluciono esto???

** BEGIN NESTED EXCEPTION **

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
        at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:645)
        at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:624)
        at com.mysql.cj.protocol.a.NativeProtocol.quit(NativeProtocol.java:1312)
        at com.mysql.cj.NativeSession.quit(NativeSession.java:182)
        at com.mysql.cj.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:1750)
        at com.mysql.cj.jdbc.ConnectionImpl.close(ConnectionImpl.java:720)
        at db.ProductoDAO.leer(ProductoDAO.java:26)
        at objetos.Producto.crearProductos(Producto.java:25)
        at main.Main.menuInventario(Main.java:57)
        at main.Main.menuMenu(Main.java:26)
        at main.Main.main(Main.java:8)


** END NESTED EXCEPTION **```

Que significa este error que no me deja correr Java?

java.sql.SQLException: Access denied for user 'amazonviewer'@'localhost' (using password: YES)

Por algún tiempo tuve este error

java.sql.SQLException: Access denied for user 'amazonviewer'@'localhost' (using password: YES)

De esto estaba seguro:

  1. Mi usuario y contraseña eran correctas
  2. el nombre de mi database era correcto
  3. estaba usando el puerto correcto
  4. tenía la versión más reciente de xamp, mysql workbench, connector/j y estaba instalados correctamente
  5. había probado ambas versiones (la que usa ann y la más reciente) del connector/j en amazonviewer y clases de prueba en paquetes diferentes dentro del mismo proyecto, y fuera en un proyecto de prueba
  6. Desinstalé y reinstalé varias veces xampp y mysql y realicé las mismas pruebas.

en el mientras, me surgieron algunos problemas menores fáciles de resolver, pero seguía sin poder conectarme a mi database, al final esto hice que me resultó:

  1. desinstalé todo,
  2. limpié el registro,
  3. eliminé los procesos del sistema que quedaron (del mysql y xamp)
  4. instalé solamente mySQL Server y Connector/J
    5 . creé la database amazonviewer y el usuario con el mismo nombre desde la consola,
  5. una vez creadala database, instalé workbench e importé el archivo *.sql a amazonviewer
  6. ahora, en consola puse
SELECT * FROM movie;

y me mostró los datos de la tabla.
8. hice un paquete nuevo en un proyecto de pruebas y escribí código para probar la conexión, con la información que obtuve del sitio de mysql y el jbdc javadoc.
9. me salieron problemas relacionados con la zona horaria, cosa que corregí en consola con:

SET GLOBAL time_zone = '-6:00';

donde '-6:00" es mi zona horaria en formato UTC.
10. mi programa se conectó exitosamente y pude obtener información de las tablas e imprimirlas en consola.

A partir de acá todo fue fácil, solo tuve que hacer los cambios en el código de amazonviewer y mi conexión fue exitosa. los cambios que hice fueron los siguientes:

//en DataBase.java
	public static final String URL = "jdbc:mysql://localhost:3306/";
	public static final String DB = "amazonviewer?";
	public static final String USER = "amazonviewer";
	public static final String PASSWORD = "amazonviewer";

// en IDBConection dentro del try/catch
	Class.forName("com.mysql.jdbc.Driver");
	//Ann usa el método getConnection(String url, String user, String password);
	connection = DriverManager.getConnection(URL+DB, USER, PASSWORD);

mi código quedó así:

//en DataBase.java
	public static final String URL = "jdbc:mysql://localhost/"; 
	public static final String DB = "amazonviewer?";
	public static final String USER = "user=amazonviewer";
	public static final String PASSWORD = "password=amazonviewer";

// en DBConectionInterface dentro del try/catch
	//la sintaxis de ann me arrojaba un warning en consola, que estaba deprecado, y que tenía que usar el siguiente.
	Class.forName("com.mysql.cj.jdbc.Driver");
	String url = URL + DB + USER + "&" + PASSWORD;
	//yo uso el método getConnection(String url); por eso concateno todo en una línea antarior.
	connection = DriverManager.getConnection(url);

Eso fueron todos los cambios realizados a mi código, y pude ver las películas. Espero esto pueda servir a alguien más que tenga el mismo problema que yo este problema.

default ArrayList<Movie> read(){

	ArrayList<Movie> movies = new ArrayList<Movie>();
	
	try (Connection cn = connectToDB()) {
		
		String query = "SELECT * FROM " + TMOVIE;
		PreparedStatement ps = cn.prepareStatement(query);
		ResultSet rs = ps.executeQuery();
		while (rs.next()) {
			
			Movie movie = new Movie(rs.getString(TMOVIE_TITLE), 
					rs.getString(TMOVIE_GENRE),
					rs.getString(TMOVIE_CREATOR),
					rs.getInt(TMOVIE_DURATION),
					rs.getShort(TMOVIE_YEAR));
			
			
			movie.setId(rs.getInt(TMOVIE_ID));
			movies.add(movie);
			
		}

public static ArrayList<Movie> makeMovieList() {

	Movie movie = new Movie();

	return movie.read();
}

Ayuda amigos, aprox por el minuto 9:28 explica que cuando se crea el nuevo ArrayList este ya puede implementar el metodo de la clase PeliculaDao, en mi caso no me deja, y el import que hice de la interfaz, me dice que no esta siendo utilizado.
Alguna idea? Muchas gracias de antemano

public static ArrayList<Pelicula> ponPeliculasLista(){
		Pelicula pelicula = new Pelicula();
		return pelicula.leer();
	}```
en esta parte me dice que pelicula.leer(); no es valido, ya que no existe el metodo.

Aqui no termina de escribir las sentencias para obtener todos los datos de la BD, creo que sería bueno que revisaran esa edición, estuve buscando mi error y era por eso; tuve que revisar el proyecto de anncode.

Excelente clase podemos cambiar en la clase DataBase el tipo de dato de las variables TMOVIE_DURATION y TMOVIE_YEAR a int y short para no tenerlas que convertir, ejemplo:

public static final intTMOVIE_DURATION = "duration";
public static final short TMOVIE_YEAR = "year";

Me sale el siguiente error. Cambio el modificador de acceso
al metodo getMovieViewed() default y funciona. Sopecho que sea la version del JRE
/*private */ default boolean getMovieViewed() {
return false;
}

Exception in thread “main” java.lang.ClassFormatError: Method getMovieViewed in class com/anncode/amazonviewer/dao/MovieDAO has illegal modifiers: 0x403
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.anncode.amazonviewer.Main.<clinit>(Main.java:98)

Tengo el siguiente error:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 ‘FROMmovie’ at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2495)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1903)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2011)
at com.sroba.amazonViewer.dao.MovieDao.read(MovieDao.java:25)
at com.sroba.amazonViewer.model.Movie.makeMoviesList(Movie.java:97)
at com.sroba.amazonViewer.Main.<clinit>(Main.java:131)

Muy desordenado el video, me perdí completamente, para lograr comprender todo lo que hizo Ann tuve que clonar su repositorio y hacer un checkout al branch de esta clase, así pude leer el código y comprender lo que quiso hacer.

Buena clase, aunque me entreveré un poco con tantas cosas jaja. Me ayudaron bastante los comentarios de los demás compañeros. ¡Gracias!

Estoy teniendo problemas al establecer la conección,
Me arroja el siguiente error:

java.sql.SQLException: Access denied for user 'amazonviewer'@'localhost' (using password: YES)

Tengo acceso al sitio http://localhost/phpmyadmin/ también me he cerciorado de tener el usuario y contraseña correctos, tengo la versión más reciente de XAMPP (v7.2.12), MySQL v8.0, MySQL Workbench v8.0, anteriormente tuve problemas de SSL y Retrieve Public Key, que solucioné y mi url quedó así

DriverManager.getConnection(jdbc:mysql://localhost:3306/amazonviewer?allowPublicKeyRetrieval=true&useSSL=false, USER, PASSWORD);

En esa línea es donde el error sucede.

¿Podría alguien ayudarme? Ya he buscado al respecto y no he encontrado ninguna solución

Esto se fue a la $%&$/& no entiendo un carajo desde hace un par de videos

A alguien mas le sigue sin traer nada a pesar de haber corregido lo que Ann menciono?

Esta muy mal este vídeo falta un montón de pasos y en vez de aclarar dudas, genera un problema.

Acá dejo mi versión del código, yo estoy leyendo los datos de conexion de un archivo *.properties:
Movie.java
MovieDAO.java
IDBConnection.java
DataBase.java
config.properties

package com.erosennin.amazonviewer.model;

import com.erosennin.amazonviewer.dao.MovieDAO;
import com.erosennin.amazonviewer.utils.Utils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <h1>Movie</h1>
 * Hereda de la clase {@link Film} e implementa la interface {@link Visualizable} permitiendo organizar objetos de tipo Movie en
 * el visor de contenido AmazonViewer.
 * <br>
 * Sobreescribe el metodo {@code String()} e implementa {@code startToSee()}, {@code stopToSee()} y {@code view()}
 *
 * @author erosennin
 * @version 1.1
 * @since 2019
 */
public class Movie extends Film implements Visualizable, MovieDAO {

    private int id;

    public Movie(){}

    public Movie(int duration, String title, String genre, String creator, short year) {
        super(duration, title, genre, creator);
        this.setYear(year);
    }

    public int getId() {
        return id;
    }

    public static List<Movie> makeMoviesList() {
        Movie movie = new Movie();
        return movie.read();
    }

    /**
     * {@inheritDoc}
     *
     * @return String. Detalle de la informacion de la Pelicula, como titulo, genero, duracion, etc.
     */
    @Override
    public String toString() {
        return "\nTitle: " + this.getTitle() +
                "\nGenre: " + this.getGenre() +
                "\nYear: " + this.getYear() +
                "\nCreator: " + this.getCreator() +
                "\nDuration: " + this.getDuration() +
                "\nSeconds viewed: " + this.getTimeViewed();
    }

    /**
     * {@inheritDoc}
     * @param startDate {@code Date} Fecha en la que se inicia la visualización.
     */
    @Override
    public void startToSee(Date startDate) {
        setStartDate(startDate);
    }

    /**
     * {@inheritDoc}
     * @param endDate {@code Date} Fecha en la que se finaliza la visualización.
     */
    @Override
    public void stopToSee(Date endDate) {
        if (getStartDate().getTime() < endDate.getTime()) {
            setTimeViewed((int) (endDate.getTime() - getStartDate().getTime()));
        } else {
            setTimeViewed(0);
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void view() {
        setViewed(true);
        startToSee(new Date());
        for (int i = 0; i < 100; i++) {
            System.out.println("...You are seeing the " + getTitle() + "...");
        }
        Utils.timeDelay(2);
        stopToSee(new Date());
        System.out.println("\n::YOU JUST SAW::" + toString());
    }
}
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 Movie setMovieViewed(Movie movie) {
        return movie;
    }

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

    private boolean getMovieViewed() {
        return false;
    }
}
package com.erosennin.amazonviewer.db;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public interface IDBConnection {

    default Connection connectDB() {
        Properties properties = getDBCredentials();
        Connection connection = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection(properties.getProperty("db.url"),
                    properties.getProperty("db.user"),properties.getProperty("db.pass"));
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return connection;
    }

    private Properties getDBCredentials() {
        Properties properties = new Properties();
        try {
            FileInputStream fileInputStream = new FileInputStream("config.properties");
            properties.load(fileInputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return properties;
    }
}
package com.erosennin.amazonviewer.db;

public class DataBase {

    public static final String TMOVIE               = "movie";
    public static final String TMOVIE_ID            = "id";
    public static final String TMOVIE_TITLE         = "title";
    public static final String TMOVIE_GENRE         = "genre";
    public static final String TMOVIE_CREATOR       = "creator";
    public static final String TMOVIE_DURATION      = "duration";
    public static final String TMOVIE_YEAR          = "year";

    public static final String TMATERIAL            = "material";
    public static final String TMATERIAL_ID         = "id";
    public static final String TMATERIAL_NAME       = "name";

    public static final String TUSER                = "user";
    public static final String TUSER_ID             = "id";
    public static final String TUSER_NAME           = "name";

    public static final String TVIEWED              = "viewed";
    public static final String TID_ID               = "id";
    public static final String TID_MATERIAL_NAME    = "id_material";
    public static final String TID_ELEMENT_NAME     = "id_element";
    public static final String TID_USER_NAME        = "id_user";

}
# config.properties file for AmazonViewer project
db.url=jdbc:mysql://localhost:3306/amazonviewer
db.user=amazonviewer
db.pass=MariaDb2019

Tengo el siguiente error: alguien sabe como puedo arreglarlo
java.sql.SQLException: null, message from server: "Host ‘DESKTOP-E3CDE8P’ is not allowed to connect to this MariaDB server"
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1104)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2412)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at db.IDBConnection.connectToDB(IDBConnection.java:13)
at dao.MovieDAO.read(MovieDAO.java:20)
at model.Movie.makeMovieList(Movie.java:54)
at main.Main.showMovies(Main.java:89)
at main.Main.showMenu(Main.java:56)
at main.Main.main(Main.java:28)
Exception in thread “main” java.lang.NullPointerException
at dao.MovieDAO.read(MovieDAO.java:22)
at model.Movie.makeMovieList(Movie.java:54)
at main.Main.showMovies(Main.java:89)
at main.Main.showMenu(Main.java:56)
at main.Main.main(Main.java:28)

Sí, un poco desordenado el vídeo pero si han ido a la par de los vídeos y se toman tiempo para revisar el código que cada uno realiza se darán cuenta que es muy poco lo que se salta

Ayuda con este error

java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)

Realizar los mapeos manualmente puede ser tedioso y muy se puede durar mucho.
En Java existe Hibernate, el cual es un ORM. Basicamente facilita el mapeo de las tablas a Clases con la ayuda de un asistente.
Con Hibernate se reduce muchisimo el tiempo de mapeo para pasar de una vez a implementar la logica de negocio

Para los que tengan el siguiente error, deben de colocar un queryParam en la URL de conexión de base de datos:

java.sql.SQLException: The server time zone value ‘Hora de verano romance’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

Antes:
jdbc:mysql://localhost:3306/amazonviewer

Despues:
jdbc:mysql://localhost:3306/amazonviewer?serverTimezone=UTC

De nada muchachos 😉

EXCELENTE CLASE.!

También se podría poner así:

public static ArrayList<Movie> makeMoviesList() {
		return new Movie().read();
}

ResultSet no solo devuelve String

rs.getInt(TMOVIE_DURATION),
rs.getShort(TMOVIE_YEAR)

de esta manera no hay que castearlos.

Excelente, salio a la primera. 😃

Excelente clase sobre la consulta a la BD y algunas buenas practicas

Salio gracias excelente clase

Me seguia sin traer ningun dato, el error que tenia era que tenia varios squemas en la base de datos (estoy usando el mysql Workbench) y en el nombre de la tabla tenia que agregar el nombre del squema tambien, me tendria que quedar el query asi:

SELECT * FROM amazonviewer.movie;

Entonces en la constante le agregue amazonviewer:

public static final String TMOVIE = "amazonviewer.movie";

Excelente clase 😃 gracias

El error “The server time zone value ‘unknown’ is unrecognized or represents more than one time zone” se soluciona ejecutando en BD (puede ser a través de phpMyAdmin) la sentencia:

SET GLOBAL time_zone = ‘-5:00’;

(en mi caso es GMT -5, Colombia)

¿Porque se referencia los campos de tabla en una clase ? No es mejor practica hacerlo con los getter y setter …

Alguien que me aclare esta duda por favor …

Para enriquecer el conocimiento obtenidos en este video, debemos de tener mucho cuidado al momento de implementar las sentencias de SQL en java, ya que no nos marca error y al momento de ejecutar pudiera no salir lo requerido. por ejemplo en la parte donde declara el query
String query = "SELECT * FROM " +TMOVIE;
no es lo mismo que
String query = “SELECT * FROM” +TMOVIE;
al pasar esa sentencia en sql no es valida por los espacios entre * y el "

se corta el video y no se puede reproducir

Tengo un error … alguien me puede explicar ?
java.sql.SQLException: Access denied for user ‘amazonviewer’@‘localhost’ (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1714)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1224)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2190)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2221)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2016)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at com.amcode.amazonviewer.db.IDBConnection.connectToDB(IDBConnection.java:14)
at com.amcode.amazonviewer.dao.MovieDAO.read(MovieDAO.java:22)
at com.amcode.amazonviewer.model.Movie.makeMoviesList(Movie.java:78)
at com.amcode.amazonviewer.Main.<clinit>(Main.java:97)