¿Cómo integrar el conector de MySQL en un proyecto Java?
La integración del conector de MySQL en un proyecto Java es fundamental para establecer una conexión con la base de datos y así permitir el acceso y la manipulación de datos. Este proceso implica la configuración de bibliotecas y ajustes específicos dentro del entorno de desarrollo.
Paso 1: Descargar e integrar el conector MySQL
Primero, asegúrate de haber descargado el archivo JAR del conector MySQL. Una vez descargado, sigue estos pasos:
Copia el archivo JAR del conector a la carpeta Libs dentro de tu proyecto. Esto garantiza que siempre esté accesible y no se pierda.
Actualiza tu entorno de desarrollo, como Eclipse, haciendo clic derecho en el proyecto y seleccionando “Refresh”.
Agrega el archivo JAR al Classpath del proyecto:
Haz clic derecho en el proyecto, ve a Properties → Java Build Path.
En la pestaña Libraries, selecciona Classpath y haz clic en Add JARs.
Selecciona el conector y aplica los cambios.
Paso 2: Configurar la máquina virtual Java
Si se enfrenta a errores relacionados con la máquina virtual Java, aborde el problema de la siguiente manera:
Accede a Properties del proyecto.
En Module Path, selecciona App Library y elige JRE System Library.
Finaliza la configuración y aplica los cambios.
Paso 3: Crear un paquete y una interfaz para la base de datos
Genera un paquete para concentrar los archivos relacionados con tu base de datos. Crea una interfaz llamada idbConnection en este paquete, que contendrá métodos para manejar la conexión:
La gestión de constantes es crucial para mantener la consistencia en los nombres de tablas y campos de la base de datos, lo que reduce errores tipográficos y facilita el mantenimiento del código.
Creación de una clase de constantes
Implementa una clase de constantes para almacenar varios parámetros de conexión:
packagecom.encode.amazonviewer.db;publicclassDatabase{publicstaticfinalString URL ="jdbc:mysql://localhost:3306/AmazonViewer";publicstaticfinalString USER ="user";publicstaticfinalString PASSWORD ="password";publicstaticfinalString T_MOVIE ="Movie";// Continuar mapeando tablas y campos...}
Además, asegura el acceso a estas constantes usando importaciones de clases estáticas, lo cual permite acceder a estas variables como si fueran parte del espacio local del proyecto.
¿Cómo simplificar la conexión a la base de datos?
Es aconsejable crear un método que maneje la creación de la conexión a la base de datos, utilizando DriverManager para obtener la conexión a partir de las constantes definidas.
Manejo de errores: Es recomendable capturar las excepciones y configurar mensajes de error amigables para el usuario.
Cierre de conexiones: Aunque se profundizará en el cierre automático con try-with-resources, asegúrate de cerrar manualmente las conexiones para prevenir fugas de memoria.
Consistencia en nombres: Mantén consistentes los nombres de campos de tablas y clases para reducir errores.
¡Anímate a seguir explorando y construyendo un sistema eficiente con Java y MySQL! La práctica habitual de estos conceptos afianzará tus conocimientos y habilidades en el manejo de bases de datos en proyectos Java.
Usar harcode es una mala practica, lo mejor es usar archivos properties, con esto tendras mas desacople en las clase Database y en caso de que cambien las condiciones por ejemplo la URL o la DB o el USER o PASSWORD no tendra que recompilar el codigo a esta tecnica se le denomina DATA-DRIVEN
A que te refieres con hard-code?
El hardcode o “código duro” es incrustar datos directamente en el código fuente del programa, como contraseña, usuarios, etc. Como comentan, es mejor obtener esos datos de una fuente externa como un fichero de configuración.
Por lo general es muy inseguro o igual es poco mantenible tener todos tus datos de ambiente o environment mapeados directamente en tu clase DataBaseMap. Por lo que es una buena práctica extraer estos datos de un archivo externo.
En java es de gran utilidad hacer esto con un application.yaml, creamos el archivo en el paquete src/main/resources y lluego extraemos las propiedades con algún paquete open source de java. En mi caso ocupé el siguiente:
SnakeYAML
E hice mi propio PropertiesLoader que carga este archivo y lo mapea en una clase de Configuración con una estructura que modela tus propiedades en el yaml.
Así puedes extraer tus datos sensibles de esta clase en tu aplicación, sin tener estos datos sensibles directamente escritos en tu código.
Para hacer esto pueden apoyarse del siguiente material que te da un ejemplo de como hacer esto:
Así tienes separada tu URL, USER y PASSWORD y puedes subir tu proyecto de igual manera a github sin problemas
En java 11 ya no se utiliza el com.mysql.jdbc.Driver, si no que se usa com.mysql.cj.jdbc.Driver
Yo estoy utilizando el java 9 para el proyecto amazonviewer y también utilizo “com.mysql.cj.jdbc.Driver”, pero yo creo que es por la versión de java connector, porque cambié de la versión que utiliza Ann es el curso, a la versión más reciente, se me mostraba en consola que el string estaba deprecado, y me indicaba la nueva forma, una vez implementado el nuevo string, todo funcionó bien.
Acá dejo mi version de la interface IDBConnection de la clase DataBase y del archivo que guarda las credenciales y la url de la BD config.properties
publicclassDataBase{publicstatic final StringTMOVIE="movie";publicstatic final StringTMOVIE_ID="id";publicstatic final StringTMOVIE_TITLE="title";publicstatic final StringTMOVIE_GENRE="genre";publicstatic final StringTMOVIE_CREATOR="creator";publicstatic final StringTMOVIE_DURATION="duration";publicstatic final StringTMOVIE_YEAR="year";publicstatic final StringTMATERIAL="material";publicstatic final StringTMATERIAL_ID="id";publicstatic final StringTMATERIAL_NAME="name";publicstatic final StringTUSER="user";publicstatic final StringTUSER_ID="id";publicstatic final StringTUSER_NAME="name";publicstatic final StringTVIEWED="viewed";publicstatic final StringTID_ID="id";publicstatic final StringTID_MATERIAL_NAME="id_material";publicstatic final StringTID_ELEMENT_NAME="id_element";publicstatic final StringTID_USER_NAME="id_user";}
Para Intellij, se agrega el connector en File->Project Structure->Libraries ... Add -> From JAVA
gracias
Es necesario mapear toda la estructura de las tablas? incluso si la bd tiene +100 tablas con muchos campos? me refiero en el campo laboral
Si quieres usar un ORM es necesario, además es la forma más sencilla de poder trabajar con los datos ya que si los tienes mapeados puedes traer el objeto y sabes exactamente que información va a llegar.
No te preocupes por esto. En el curso de Java EE aprenderás cómo hacer un mapeo en la base de datos con Hibernate a través de anotaciones.
package com.anncode.amazonviewwe.db;publicclassDataBase{publicstatic final StringURL="jdbc:mysql://localhost:3306/";publicstatic final StringDB="amazonviewer";publicstatic final StringUSER="amazonviewer";publicstatic final StringPASSWORD="isabel";//Tabla movie publicstatic final StringTMOVIE="movie";publicstatic final StringTMOVIE_ID="id";publicstatic final StringTMOVIE_TITLE="title";publicstatic final StringTMOVIE_GENER="gener";publicstatic final StringTMOVIE_CREATOR="creator";publicstatic final StringTMOVIE_DURATION="duration";publicstatic final StringTMOVIE_YEAR="year";//Tabla material publicstatic final StringTMATERIAL="material";publicstatic final StringTMATERIAL_ID="id";publicstatic final StringTMATERIAL_NAME="name";//Tabla userpublicstatic final StringTUSER="user";publicstatic final StringTUSER_ID="id";publicstatic final StringTUSER_NAME="name";//Tabla Viewedpublicstatic final StringTVIEWED="viewed";publicstatic final StringTVIEWED_ID="id";publicstatic final StringTVIEWED_ID_MATERIAL="id_material";publicstatic final StringTVIEWED_ID_ELEMENT="id_elemet";publicstatic final StringTVIEWED_ID_USER="id_user";}```
Creo que está de más el mapeo de todas las tablas ya que en los frameworks actuales se puede modelar la estructura de la base de datos en clases.
al momento de mapear debo poner el tipo de dato del capo de mi tabla o lo hago todo en string ???
Una consulta, no sería más fácil utilizar un ENUM para las constantes URL, DB, USER y PASSWORD? Se me hace más sencillo de usar!!! Estará bien usarlas?
Gracias saludos
Una consulta, como saber de que manera crear una conexión a BD, en el curso de persistencia de datos lo hacen diferente, segun tengo entendido ya no se usa Class.forName()
¿Cómo se hace para que la contraseña no se vea al momento de conectar con la base de datos?
Al momento de declarar la clase DataBase, se hardcodea el PASSWORD. ¿Hay forma de ocultar la contraseña?
Minuto: 10:05
saludos, les cuento que desde que tocó cambiar a java 10 no he podido realizar el montaje del proyecto de forma correcta, no he podido montar el java10 de forma exitosa, alguien me puede ayudar con el tema. Gracias.
Aqui te dejo el repositorio del proyecto en Java 11:
Buenas tengo una duda, en mi IDE me marcaba eeror el DriverManager, me pedia que se tenia que realizar un cast de un connection. Si hago el cast no me marca error pero Ann Code no ha realizado ningun cast.
Duda resuelta, era muy fallo tonto. Al parecer el IDE de java me realizo el import de mysql y no sql. Gracias
me pasa lo mismo !!! pero tengo el jdbc de mysql
donde dice Class.forName(“com.mysql.jdb.Driver”);
lo tengo que poner asi ? o como se llame mi archivo jar que descarge ?
Así como está!
Exactamente que hace
Class.forName("com.mysql.jdbc.Driver");
?
Ya que si comento esa linea el proyecto sigue funcionando correctamente.
Para javaEE si es necesario
Una buena practica es definir el objetco connection como un Singleton ya que con esto solo creas y ocupas una instancia de este durante todo el proyecto.