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

Generando conexión a la base de datos y creando clase de constantes

27/40
Recursos

¿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:

  1. Copia el archivo JAR del conector a la carpeta Libs dentro de tu proyecto. Esto garantiza que siempre esté accesible y no se pierda.
  2. Actualiza tu entorno de desarrollo, como Eclipse, haciendo clic derecho en el proyecto y seleccionando “Refresh”.
  3. Agrega el archivo JAR al Classpath del proyecto:
    • Haz clic derecho en el proyecto, ve a PropertiesJava 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:

  1. Accede a Properties del proyecto.
  2. En Module Path, selecciona App Library y elige JRE System Library.
  3. 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:

package com.encode.amazonviewer.db;

public interface idbConnection {
    default Connection connectToDb() throws SQLException {
        Connection connection = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/AmazonViewer",
                    "user", "password"
            );
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
}

¿Cómo manejar constantes de bases de datos?

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:

package com.encode.amazonviewer.db;

public class Database {
    public static final String URL = "jdbc:mysql://localhost:3306/AmazonViewer";
    public static final String USER = "user";
    public static final String PASSWORD = "password";
    public static final String 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.

import static com.encode.amazonviewer.db.Database.*;

public Connection connectToDb() {
    Connection connection = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection(URL, USER, PASSWORD);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return connection;
}

Recomendaciones adicionales

  • 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.

Aportes 25

Preguntas 9

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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
https://mvnrepository.com/artifact/org.yaml/snakeyaml/1.24

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:

https://dzone.com/articles/using-yaml-java-application

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**

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

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;
    }
}
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
package com.anncode.amazonviewwe.db;

public class DataBase {

	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 = "isabel";
	
	//Tabla movie	
	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_GENER     = "gener";
	public static final String TMOVIE_CREATOR   = "creator";
	public static final String TMOVIE_DURATION  = "duration";
	public static final String TMOVIE_YEAR      = "year";
	
	//Tabla material 	
	public static final String TMATERIAL    	= "material";
	
	public static final String TMATERIAL_ID 	= "id";
	public static final String TMATERIAL_NAME   = "name";

	//Tabla user
	public static final String TUSER    		= "user";
	
	public static final String TUSER_ID  		= "id";
	public static final String TUSER_NAME     	= "name";
	
	
	
	//Tabla Viewed
	public static final String TVIEWED 			= "viewed";
	
	public static final String TVIEWED_ID  	     	= "id";
	public static final String TVIEWED_ID_MATERIAL  = "id_material";
	public static final String TVIEWED_ID_ELEMENT   = "id_elemet";
	public static final String TVIEWED_ID_USER      = "id_user";

}```

Para Intellij, se agrega el connector en File->Project Structure->Libraries … Add -> From JAVA

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 ???

Si tenemos una base de datos con 100 o mas tablas es recomendable mapear todas las tablas y atributos?

Empezare a Mapear.!! 😃

excelente clase!!!

donde dice Class.forName(“com.mysql.jdb.Driver”);
lo tengo que poner asi ? o como se llame mi archivo jar que descarge ?

Exactamente que hace

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

?

Ya que si comento esa linea el proyecto sigue funcionando correctamente.

Como hago el read() pero para el DAO de serie, esto teniendo en cuenta que en la base de datos se usa foreing key por la relacion de de Serie con sus respectivos chapters, en el proyecto se hace el de movie y nos deja en la nada para saber como hacer el de Serie con sus respectivos chapters y el de Book con sus respectivas pages.

dudo que alguien me conteste.

Veo muchos comentarios que hablan sobre la mala practica de quemar el codifgo. Yo suelo crear una clase singleton que lee un archivo configurable, de esta forma tengo accesso a los datos desde cualquier parte del codigo. 😄

Recomiendo hacer la conexion de la base de datos atraves de datasource que permite manejar las conexiones , en caso que no sepan unicamente buscan datasources weblogic o webpshere alli hay amplia documentacion

Excelente clase.

Pregunta, hay que crear las tablas de Series, Chapter y Books o solo hacer lo que ha hecho la profe en la tabla movie?

Creo que para los ejemplos deberías tener una buena indentación ya que revisar código no ordenado es un gran problema cuando tienes que mantener algún sistema.

Excelente explicación de generar la conexión a la base de datos

Excelente 😃 sigamos avanzando. Use maven para agregar las librerías necesarias en este caso el conector de mysql

Bueno primero, creo seria mejor colocar asi:

connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/amazonviewer","amazonviewer","amazonviewer");

Por lo otro, no dire nada porque no se que mas siga.

Muy buenos dias, alguien me puede ayudar a llenar una JTable ?

Muy buena explicación. Ya voy recordando.

Una duda … porque usa el objeto Connection de el paquete java.sql e importa la librería de jdbc que contiene otro tipo de objeto Connection y no usa este que para algo se importó la librería??

buena explicación