¿Cómo manejar la conexión a la base de datos de manera eficiente?
En el desarrollo de aplicaciones, es crucial manejar las conexiones a la base de datos de forma efectiva para evitar errores e ineficiencias. Una técnica esencial para esto es utilizar un if statement para verificar si la conexión (connection) no es nula. De esta manera, se puede ejecutar un mensaje en modo de depuración para confirmar que la conexión se estableció exitosamente, añadiendo un toque de alegría con un emoji.
¿Cómo incorporar herencia en interfaces para gestionar conexiones?
El uso de la herencia entre interfaces puede enriquecer significativamente el diseño del software. En este caso, se extiende una interfaz, EDVConnection, para adquirir superpoderes y métodos adicionales. Esto facilita la reutilización del método connect to EDV en otras partes del código, promoviendo un código limpio y mantenible.
El bloque try with resources es una joya cuando manejamos conexiones que necesitan liberar recursos automáticamente. Permite gestionar la conexión de manera eficiente implementando un try-catch para capturar excepciones, garantizando que los recursos se cierren adecuadamente, incluso en caso de errores.
try(Connection conn = driver.connectToEDV()){// Lógica de manejo con conexión}catch(SQLException ex){// Manejo de excepciones}
¿Cómo ejecutar consultas parametrizadas con PreparedStatement?
Utilizar PreparedStatement en lugar de Statement es ideal para ejecutar consultas que requieran parámetros en SQL, mejorando así la seguridad y eficiencia de las consultas. La consulta se define anticipadamente y los parámetros se introducen cuando se ejecuta el statement.
¿Cuál es el proceso para mapear resultados de SQL a objetos en Java?
Mapear los resultados de una consulta SQL a objetos Java consiste en iterar sobre el ResultSet para extraer cada registro y sus respectivos campos. Esto permite llenar objetos del tipo deseado con los datos recuperados, mejorando así la organización y accesibilidad de los datos en la aplicación.
while(resultSet.next()){Movie movie =newMovie(); movie.setTitle(resultSet.getString("title"));// Continúa con otros campos}
¿Cómo manejar tipos de datos primitivos con clases Wrapper?
Cuando trabajamos con tipos de datos primitivos como int o short, las clases wrapper, como Integer y Short, son invaluables. Estas clases facilitan la conversión de datos y deben ser empleadas especialmente cuando se obtienen valores como strings desde una base de datos, para ser convertidos a su tipo correspondiente en Java.
¿Cómo gestionar la creación e implementación de métodos en una interfaz?
Al implementar métodos en una interfaz, es fundamental asegurarse de que los métodos abstractos sean sobrescritos y que la lógica de los métodos concretos sea coherente con su propósito. En este contexto, implementar un método read es crucial para acceder a los datos almacenados.
publicArrayList<Movie>read(){ArrayList<Movie> movies =newArrayList<>();// Lógica para llenar la lista de películasreturn movies;}
Este contenido no solo amplía tus conocimientos sobre conexiones a bases de datos y manejo de excepciones en Java, sino que también cimenta las bases para explorar el uso de JDBC para la manipulación de datos. ¡Sigue explorando y aprendiendo para enriquecer tus habilidades de programació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.
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
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.
al parecer en la clase MOVIE no me quiere reconocer el statement Read(); en la parte donde se creo el objeto movie.
The method read() is undefined for the type Movie
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at com.anncode.amazonviewer.db.IDBConnection.connectToDB(IDBConnection.java:13)
at com.anncode.amazonviewer.dao.MovieDAO.read(MovieDAO.java:21)
at com.anncode.amazonviewer.model.Movie.makeMoviesList(Movie.java:91)
at com.anncode.amazonviewer.Main.<clinit>(Main.java:100)
que errror es de jdk ??
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at com.anncode.amazonviewer.dao.MovieDAO.read(MovieDAO.java:23)
at com.anncode.amazonviewer.model.Movie.makeMoviesList(Movie.java:91)
at com.anncode.amazonviewer.Main.<clinit>(Main.java:100)
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";
Bueno, a mi me salieron dos errores pero ya los pude corregir.
El primer error que me salió es que la siguiente línea en la interface IDBConnection está obsoleta (en la versión 10 de java y en la version 8.0.11 de del conector de mysql Mayo 2018)
Class.forName("com.mysql.jdbc.Driver");
La debes de reemplazar por la siguiente línea (solo se agrega un cj)
Class.forName("com.mysql.cj.jdbc.Driver");
El otro error fue que no se reconocia la zona horaria del servidor mysql, para eso, si descargaste XAMPP, tienes que ir al control panel de xamp y en el boton config de MySQL abrir el archivo my.ini (para el caso de windows 10) y justo despues de la línea
[mysqld]
agregar esta otra linea
default_time_zone='-06:00'
(-06:00 para el caso de mexico, revisa tu zona horaria)
y listo, con eso corrio el programa sin problemas 😃
no esta consiguiendo el driver, valida que la libreria este importada en el proyecto y luego cuando coloques el nombre del driver utilizando el Class.for.name se encuentre bien escrito.
Cuando intentas cargar la clase Driver, estás poniendo una coma en el nombre del paquete en vez de punto. Debería ser
Class.forName("com.mysql.jdbc.Driver")
Actualmente lo tienes como:
Class.forName("com.mysql.jdbc,Driver")
Hola a todos !!!
¿porque se referencia los campos de tabla en una clase y no se utilizan mejor los getter y setter con cada atributo de la tabla con sus constructores y su toString ?
Si te refieres a la clase DataBase ... los setters no son necesarios ya que los valores no cambiaran de hecho son final y por que todos los elementos son static final. Hacer un getter seria redundante y nos haría escribir mas código.
Espero haberte ayudado, si no es asi espero tu respuesta :)
Hola, esta pregunta es de hace 3 años, pero me paso lo mismo. Yo lo solucione agregando a la constante:
public static final String DB = "amazonviewer?autoReconnect=true&useSSL=false"
y listo.
Quiero comentarles 2 errores que me ocurrieron:
Ejecutando el programa, al querer seleccionar movies en el menú principal:
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.
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.
Movie.java
publicclassMovieextendsFilmimplementsIVisualizable,MovieDAO{publicMovie(){}publicstaticArrayList<Movie>makeMoviesList(){Movie movie =newMovie();return movie.read();}
<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(NativeMethod) at java.lang.Class.forName(Class.java:264)>
saludos a todos, pregunta a alguien le sale el siguiente error al ejecutar
WedDec0522:03:09COT2018WARN:EstablishingSSL 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
WedDec0522:03:11COT2018WARN:Caughtwhile disconnecting...EXCEPTIONSTACKTRACE:**BEGINNESTEDEXCEPTION**javax.net.ssl.SSLExceptionMESSAGE: 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)**ENDNESTEDEXCEPTION**```
el programa se ejecuta correctamente pero al iniciar el JavaApplication salata ese error