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

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

27/39
Recursos

Aportes 29

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesió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
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

Hola, viendo los comentarios me dí cuenta de que se puede hacer de una manera menos “Hardcodeada”, usando properties files.

Aquí les dejo un link que me ayudó a crearlos:
https://www.onlinetutorialspoint.com/jdbc/jdbc-connection-with-properties-file.html

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

https://dev.mysql.com/downloads/file/?id=498587 este es el link para connector -> choose independent

al momento de mapear debo poner el tipo de dato del capo de mi tabla o lo hago todo en string ???

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";

}```

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

Excelente clase.

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

excelente clase!!!

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

Empezare a Mapear.!! 😃

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

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

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

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.

Exactamente que hace

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

?

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

Muy buena explicación. Ya voy recordando.

Mas notas para reforzar este tema. Saludos,
https://www.javatpoint.com/java-jdbc

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

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.

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

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.

segui el link pero no encuentro el conector

buena explicación

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