Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ASIGNATURA:
Programación orientada a objetos II
ALUMNO:
MATRÍCULA:
ES1822024128
FECHA:
06 de Marzo del 2020
1
Introducción
Para esta actividad, vamos a trabajar con el proyecto de restaurante de las unidades pasadas,
sin embargo, para este punto vamos a crear las conexiones con la base de datos en mi caso con
MySQL con el gestor de WAMPServer, además de crear los campos para la tabla de inventarios
y una investigación sobre las sentencias DML y DDL.
Por otra parte vamos a generar la conexión desde netbeans con una clase conectar donde
integraremos la ruta para la conexión a nuestra base de datos, además que para poder realizar
las inserción de datos y consultas vamos a ocupar las sentencias DML y DDL que previamente
investigamos.
2
Índice
Índice ................................................................................................................................................. 3
Importancia de sentencia DML y DDL ...................................................................................... 4
Para que sirve SQL ........................................................................................................................ 4
Pasos para conectar una base datos en JAVA ...................................................................... 5
Diagrama de flujo inventarios ..................................................................................................... 9
Captura de pantalla inventarios ............................................................................................... 10
Evidencia de registros en base de datos inventarios ........................................................ 11
Registro en MySQL:..................................................................................................................... 12
Documentación de código ......................................................................................................... 13
Clase conectar que sirve para enlace a nuestra base de datos ...................................... 30
Conclusiones................................................................................................................................. 32
Bibliografía ..................................................................................................................................... 33
3
Para que sirve SQL
A lo largo de las asignaturas de la carrera, hemos aprendido que SQL es un lenguaje estándar
de acceso a base de datos relacional.
SQL nos sirve, para manipular e tener la integridad de la información representada por los datos
que se almacenan en las bases de datos, la venta de usar SQL es que está basada en cálculo
relacional o algebra relacional es por ello que este tiene soporte para bases de datos
relacionales. SQL en general nos ayuda como gestor de base de datos para un sistema que
estemos desarrollando.
Importancia de sentencia DML y DDL
Empezando con DDL (lenguaje de definición de datos en español) su importancia radica en que
es el que permite la definición de las estructuras que conforman las bases de datos, es decir con
este nos permite definir la estructura que almacenaran los datos, dentro de la sentencia de este
nos encontramos:
CREATE que usamos para crear una base de datos (tablas, vistas, etc)
Un ejemplo es CREATE SCHEMA `tiendaDB`;.`productos`(
`llavePrimaria `INT NOT NULL,
`id_producto `VARCHAR(10) NULL,
`nombre `VARCHAR(10) NULL,
PRIMARY KEY (`llavePrimaria`));
ALTER la utilizamos cuando necesitamos modificar una estructura, por ejemplo, añadir o
borrar columnas de una tabla.
DROP por último con esta sentencia podemos eliminar los objetos de la estructura un
ejemplo es el índice.
Pasando con DML, este su importancia radica en que nos ayuda o nos permite a los usuarios,
introducir datos para posteriormente realizar tareas como consulta o modificación en la base de
datos. Es decir, son las sentencias que nos sirven para manipular los datos, dentro de este
apartado tenemos:
SELECT nos sirve para realizar consultas sobre los datos que tenemos en la base.
INSERT nos ayuda a insertar los valores en una base de datos
UPDATE nos ayuda a modificar los valores de uno o varios registros
DELETE se utiliza para eliminar las filas de una tabla
4
Pasos para conectar una base datos en JAVA
De acuerdo con el video de: Ingeniería de Sistemas. (2015). Como Conectar Java con Mysql -
Correctamente (Paso a Paso). 04-09-2019, de YouTube Sitio web:
https://www.youtube.com/watch?v=nbAYB6HyTQI
1- Primero que todo debemos descargar el archivo .jar conocido como MySQLConnector y
añadirlo a las librerías de nuestro proyecto; luego crearemos en nuestro proyecto, un paquete al
cual llamaremos "Métodos", y dentro de este, crearemos una clase la cual llamaremos
"ConexionMySQL".
import java.sql.*;
import javax.swing.JOptionPane;
4- La primera parte de este código resaltado en azul, consiste en crear 4 variables de tipo String
y con la propiedad public. En la primera variable llamada "db", guardamos el nombre de la Base
de datos a la cual nos queremos conectar; en la segunda variable url, guardaremos la ruta de
donde se encuentra ubicada nuestra Base de datos, si nos damos cuenta deberemos emplear la
api "jdbc:mysql" lo cual permite indicar que queremos conectar nuestra aplicación Java con una
Base de datos en MySQL, además debemos consignar la dirección de la máquina que contiene
la Base de datos, en este caso como trabajaremos en una sola máquina colocamos "localhost",
en el caso dado que trabajemos de forma remota debemos reemplazar este valor por la
dirección IP (ej. 192.168.1.2) de la máquina a la cual necesitamos conectarnos, en esta misma
variable concatenamos la variable que instanciamos al principio "+db"; luego la tercera y cuarta
5
variable "user" y "pass", corresponden al usuario y la clave para poder tener acceso a la Base de
datos.
publicConnectionConectar(){}
6- Ahora instanciaremos un objeto de tipo "Connection", al cual asignaremos el valor "null". Esto
irá dentro del método del punto anterior:
7- Proseguiremos a crear un bloque "try-catch", debido a que el código que hemos de emplear
podría producir una excepción y/o error. Este bloque irá dentro del método mencionado en el
punto 5:
try{
}catch(Exception ex){
8- En esta línea de código lo que haremos será cargar la Clase "Driver", que se encuentra
ubicada dentro del ".jar" MySQLConnector que agregamos a nuestras librerías. Esta línea irá
dentro del "try{}" del punto anterior:
6
Class.forName("org.gjt.mm.mysql.Driver");
10- En el caso dado de que ocurra un error al tratar de conectarnos con nuestra Base de datos,
procederemos a mostrar dicha excepción a través de una pequeña ventana, usando el
componente JOptionPane. Esta parte irá dentro del "catch(){}" del punto 7:
JOptionPane.showMessageDialog(null, ex);
11- Por último retornaremos la conexión obtenida, la cual podría ser exitosa o nula. Esta línea irá
por fuera del try-catch, pero dentro del método Conectar:
return link;
12- En cuanto al código para el test de conexión, copia y pega el código resaltado en verde,
dentro del evento y/o método del botón de un formulario de tu proyecto.
13- En las dos primeras líneas de código, lo que hacemos es instanciar un objeto de nuestra
Clase ConexionMySQL.java y luego en un objeto tipo Connection, administramos y/o
capturamos la conexión que se nos devuelve al llamar el método Conectar de nuestra Clase
mencionada anteriormente:
java.sql.Connectioncn= mysql.Conectar();
7
14- En el resto de código, empleamos un condicional "if", en el cual verificamos que no se nos
devuelva una conexión nula, si se cumple esta condición, mostraremos una ventana
(JOptionPane) en la cual mostraremos el mensaje "Conectado"; luego dentro de un try-catch,
procedemos a cerrar la conexión con la Base de datos, y en dado caso de que ocurra una
excepción a la hora de realizar la desconexión, mostraremos dicho error por consola:
if(cn!=null){
JOptionPane.showMessageDialog(null, "Conectado");
try{
cn.close();
}catch(SQLException ex){
8
15- Ahora sólo basta con ejecutar tu proyecto y hacer las respectivas pruebas
Diagrama de flujo inventarios
9
Captura de pantalla inventarios
En esta captura se crea la estructura de los campos con los label y textfield, demás se agrega
una tabla en donde se van a ir consultando los datos de nuestra base de datos en MySQL. Se
crean lo botones para capturar que es el que inserta los datos en nuestra base, limpiar para
limpiar los campos.
10
Evidencia de registros en base de datos inventarios
Se muestra como se hace el llenado de datos y con ello se registra en nuestra base de datos, se
generó un JOptionPane, para mostrar que se almaceno correctamente.
11
12
Se muestra como los datos se almacenaros en nuestra base datos y que lo podemos
visualizar desde el mismo programa sin necesidad de ir al localhost.
Registro en MySQL:
13
Documentación de código
Para esta actividad voy a colocar el código del proyecto de las clases con las que trabajamos
Inventarios JFrame:
package proyecto;
importclases.Conectar;
import java.awt.Color;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
/**
*
* @author Ángel Genaro T.M
*/
public class Inventarios extends javax.swing.JFrame {
/**
* Creates new form Inventarios
*/
publicInventarios() {
setLayout(null);
setTitle("Inventarios"); //se le da un título a la ventana
14
setIconImage(new ImageIcon(getClass().getResource("/imagenes/icon.png")).getImage());
initComponents();
limpiar();
bloquear();
cargar();
while(rs.next()){
registros [0]=rs.getString("Clave_producto");
registros [1]=rs.getString("Sucursal");
registros [2]=rs.getString("Producto");
registros [3]=rs.getString("Cantidad");
registros [4]=rs.getString("Marca");
registros [5]=rs.getString("Proveedor");
model.addRow(registros);
}
t_datos.setModel(model);
} catch (SQLException ex) {
15
JOptionPane.showMessageDialog(null,ex);
}
void bloquear() {
t_cproducto.setEnabled(false);
t_sucursal.setEnabled(false);
t_cantidad.setEnabled(false);
t_producto.setEnabled(false);
t_marca.setEnabled(false);
t_proveedor.setEnabled(false);
jButton2.setEnabled(false);
jButton3.setEnabled(false);
jButton4.setEnabled(false);
jButton5.setEnabled(false);
jButton6.setEnabled(true);
jButton7.setEnabled(true);
void desbloquear() {
t_cproducto.setEnabled(true);
t_sucursal.setEnabled(true);
t_cantidad.setEnabled(true);
t_producto.setEnabled(true);
16
t_marca.setEnabled(true);
t_proveedor.setEnabled(true);
jButton2.setEnabled(true);
jButton3.setEnabled(true);
jButton4.setEnabled(true);
jButton5.setEnabled(true);
jButton6.setEnabled(false);
jButton7.setEnabled(false);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
17
jButton4 = new javax.swing.JButton();
jButton5 = new javax.swing.JButton();
jButton6 = new javax.swing.JButton();
jButton7 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
t_datos = new javax.swing.JTable();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("Regresar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
jButton1ActionPerformed(evt);
}
});
jLabel2.setText("Sucursal");
jLabel3.setText("Producto");
jLabel4.setText("Cantidad");
jLabel5.setText("Marca");
t_cproducto.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
t_cproductoActionPerformed(evt);
18
}
});
t_sucursal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
t_sucursalActionPerformed(evt);
}
});
t_producto.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
t_productoActionPerformed(evt);
}
});
t_cantidad.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
t_cantidadActionPerformed(evt);
}
});
t_marca.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
t_marcaActionPerformed(evt);
}
});
jLabel6.setText("Proveedor");
t_proveedor.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
t_proveedorActionPerformed(evt);
}
});
19
jButton2.setText("Capturar");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
jButton2ActionPerformed(evt);
}
});
jButton3.setText("Editar");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
jButton3ActionPerformed(evt);
}
});
jButton4.setText("Limpiar");
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
jButton4ActionPerformed(evt);
}
});
jButton5.setText("Seleccionar");
jButton6.setText("Nuevo");
jButton6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
jButton6ActionPerformed(evt);
}
});
jButton7.setText("Salir");
jButton7.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
20
jButton7ActionPerformed(evt);
}
});
t_datos.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{},
{},
{},
{}
},
new String [] {
}
));
jScrollPane1.setViewportView(t_datos);
jMenu1.setText("Menú");
jMenuItem1.setText("Salir");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
jMenu2.setText("Ayuda");
jMenuItem2.setText("Acerca de");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEventevt) {
21
jMenuItem2ActionPerformed(evt);
}
});
jMenu2.add(jMenuItem2);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
22
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addGap(65, 65, 65)
.addComponent(t_producto))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(68, 68, 68)
.addComponent(t_sucursal))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(t_cproducto, javax.swing.GroupLayout.PREFERRED_SIZE, 211,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(layout.createSequentialGroup()
.addComponent(jButton6)
.addGap(121, 121, 121)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton3)
.addComponent(jButton2))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton4))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton5)
.addComponent(jLabel4)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6)
.addComponent(jLabel5))
.addGap(58, 58, 58)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(t_marca, javax.swing.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE)
.addComponent(t_proveedor))))
23
.addGap(0, 0, Short.MAX_VALUE)))))
.addContainerGap(28, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(t_cproducto, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(19, 19, 19)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(t_sucursal, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(22, 22, 22)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(t_producto, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(t_cantidad, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(21, 21, 21)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(t_marca, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(26, 26, 26)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
24
.addComponent(jLabel6)
.addComponent(t_proveedor, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton6)
.addComponent(jButton4)
.addComponent(jButton2))
.addGap(29, 29, 29)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton5)
.addComponent(jButton3))
.addGap(18, 18, 18)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 129,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton7)
.addComponent(jButton1))
.addContainerGap(29, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
25
dispose();
}
26
try { //se genera para evitar errores
PreparedStatementpst = conn.prepareStatement(sql);
pst.setString(1, cproducto);
pst.setString(2, sucursal);
pst.setString(3, producto);
pst.setString(4, cantidad);
pst.setString(5, marca);
pst.setString(6, proveedor);
int n = pst.executeUpdate(); //se aplica la actualización
if (n > 0) {
JOptionPane.showMessageDialog(null, "Se ha guardado exitosamente en BD");
}
} catch (SQLException ex) {
Logger.getLogger(Inventarios.class.getName()).log(Level.SEVERE, null, ex);
}
t_cproducto.setText("");
t_sucursal.setText(""); //limpieza de pantalla
t_producto.setText("");
t_cantidad.setText("");
t_marca.setText("");
t_proveedor.setText("");
}
27
private void t_sucursalActionPerformed(java.awt.event.ActionEventevt) {
// TODO add your handling code here:
t_sucursal.transferFocus();
}
System.exit(0);
}
28
/**
* @paramargs the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Inventarios.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Inventarios.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Inventarios.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Inventarios.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
}
//</editor-fold>
29
public void run() {
new Inventarios().setVisible(true);
}
});
}
30
}
package clases;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;
/**
*
* @author José Daniel N.C
*/
publicclass Conectar { //metodo para conexión a la base de datos
public Conectar() {
conn = null;
try {
Class.forName(driver); // se esta llamando a la variable
conn = DriverManager.getConnection(url, user, password); //es la conexión a la base de
datos
if (conn != null) { //se crea condicional para verificar que nos hemos conectado a la base
de datos
JOptionPane.showMessageDialog(null, "Conexión establecida..:D");
}
31
} catch (ClassNotFoundException | SQLException e) {
JOptionPane.showMessageDialog(null, "Error en la conexión" + e);
}
}
Conclusiones
En lo personal esta actividad se me hizo demasiado interesantes pues, logré establecer una
conexión con una base de datos en este caso con MySQL, y con ello asegurar que los registros
que vaya ingresando se ingresen a una base donde no se perderán, aunque cierre el programa.
Tengo que decir que estoy muy contento con el avance en la actividad pues mi proyecto va
tomando forma, y esto es el principio para poder desarrollar programas más complejos, creo que
con la práctica podemos ir agregar nuevas funciones, eventos que hagan más estético al
programa.
32
Bibliografía
1.-Alvaro E. García. (2011). Manual práctico de SQL. 06-003-2020, de Amazon Sitio web:
https://s3.amazonaws.com/academia.edu.documents/38558216/ManualPracticoSQL.pdf?respon
se-content-disposition=inline%3B%20filename%3DManual_Prctico_de_SQL.pdf&X-Amz-
Algorithm=AWS4-HMAC-SHA256&X-Amz-
Credential=AKIAIWOWYYGZ2Y53UL3A%2F20190904%2Fus-east-
1%2Fs3%2Faws4_request&X-Amz-Date=20190904T213308Z&X-Amz-Expires=3600&X-Amz-
SignedHeaders=host&X-Amz-
Signature=ccf3ec945f637ebafaa47f00ad8691f0d38e968f4ff01d859933653319c8c9d6
2.-Carme Martín Escofet. (2018). El lenguaje SQL. 06-003-2020, de Google academico
(pdfcursos) Sitio web: https://pdfcursos.com/18-curso-lenguaje-sql.pdf
3.-Ricardo Morales. (2012). Netbeans Guardar datos a MySql Java Video 2. 06-003-2020, de
YouTube Sitio web: https://www.youtube.com/watch?v=hBewvo8KS6E
4.-Ricardo Morales. (2012). Netbeans Objeto Conectar a MySql Java Video 1. 06-003-2020, de
YouTube Sitio web: https://www.youtube.com/watch?v=ySzC78xloxY&t=356s
33