Tutorial CRUD en Java y MySQL

Durante nuestro curso de desarrollo de aplicaciones en Java y MySQL aprendemos a crear un CRUD, que es el acronimo de Create, Read, Update and Delete (Crear, Leer, Actualizar y Borrar), que se usa para referirse a las transacciones básicas en bases de datos.

Primero aprenderemos a realizar esta aplicación de forma sencilla con programación estructurada para familiarizarnos con el lenguaje de programación Java y la integración de datos de MySQL. Más adelante haremos una aplicación similar pero implementado la arquitectura MVC.

Requerimientos

  • JDK 8.0 o superior
  • MySQL 5.7 o superior
  • Connector/J 8.0

El proyecto se desarrollo con de IDE Apache Netbeans.

Crear base de datos

Aquí la estructura de la base de datos y tabla.

CREATE DATABASE IF NOT EXISTS `escuela` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

USE `escuela`;

CREATE TABLE `persona` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clave` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `nombre` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `domicilio` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
  `telefono` varchar(15) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `correo_electronico` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_nacimiento` date DEFAULT NULL,
  `genero` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Crear proyecto

El proyecto lo hemos desarrollado en el IDE Netbeans actualmente Apache Netbeans. Creamos un proyecto de tipo Java Application y desmarcamos la casilla Create Main Class:

Esto creará un proyecto vacío por lo cual agregaremos un paquete dan clic derecho sobre el nombre del proyecto > New > Java Package y no nombramos como app.

Dentro de este paquete agregamos un JFrame dando clic derecho sobre el nombre del paquete > New > JFrame Form y lo nombramos como persona.

La estructura del proyecto se será así:

Diseño de la vista

Para agregar el diseño de nuestro formulario abrimos el archivo persona.java dando doble clic, agregamos el siguiente diseño:

Descripción de los elementos

ElementoTextoVariable
JLabelClave
JLabelNombre
JLabelDomicilio
JLabelTelefono
JLabelEmail
JLabelFecha de nacimiento
JLabelGenero
JTextFieldtxtClave
JTextFieldtxtId
JTextFieldtxtNombre
JTextFieldtxtDomicilio
JTextFieldtxtTelefono
JTextFieldtxtEmail
JTextFieldtxtFecha
JComboBoxcbxGenero
JButtonBuscarbtnBuscar
JButtonGuardabtnGuarda
JButtonModificabtnModifica
JButtonEliminabtnElimina
JButtonLimpiarbtnLimpiar

Para el elemento JComboBox ve a la propiedades y en Model agrega las opciones:

  • Selecciona
  • Masculino
  • Femenino

Puedes agregar más opciones. También puede agregar más elementos al formulario según tus necesidades.

Conexión a MySQL

Para conectar Java con MySQL se necesita un controlador JDBC compatible entre la versión JDK y MySQL. Descargar Connector/J.

Después de descargar el controlador vamos al proyecto y damos clic derecho en la carpeta Libraries y seleccionamos Add JAR/Folder, buscamos el controlador .jar y lo agregamos.

Teniendo el controlador agregado ya podemos conectarnos a la base de datos de MySQL para esto regresamos al JFrame pero ahora seleccionamos la pestaña source para ver el código fuente del formulario.

Método para conexión

Dentro del código fuente de la clase persona.java trabajaremos después del constructor que es el método que se llama igual que la clase.

public static Connection getConection() {
    Connection con = null;
    String base = "escuela"; //Nombre de la base de datos
    String url = "jdbc:mysql://localhost:3306/" + base; //Direccion, puerto y nombre de la Base de Datos
    String user = "root"; //Usuario de Acceso a MySQL
    String password = "password"; //Password del usuario

    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        con = DriverManager.getConnection(url, user, password);
    } catch (ClassNotFoundException | SQLException e) {
        System.err.println(e);
    }
    return con;
}

Métodos CRUD

Después de realizar la conexión a MySQL crearemos los métodos para las transacciones básicas; Registrar, Leer o Buscar, Modificar y Eliminar. Para estos se necesita implementar eventos de ActionListener la cual se usa para detectar y manejar eventos de acción, como el clic en los botones.

Podemos activar este eventos de forma automática regresando a la vista diseño y dando doble clic en los botones o dando clic derecho sobre el botón > Events > Action > actionPerformed.

Antes de agregar el código a los botón crearemos un método que elimine el contenido de las cajas de texto (JTextField).

private void limpiarCajas() {
    txtClave.setText(null);
    txtNombre.setText(null);
    txtDomicilio.setText(null);
    txtTelefono.setText(null);
    txtEmail.setText(null);
    txtFecha.setText(null);
    cbxGenero.setSelectedIndex(0);
}

Método del botón para guardar

private void btnGuardaActionPerformed(java.awt.event.ActionEvent evt) {                                          

    Connection con;

    try {
        con = getConection();
        ps = con.prepareStatement("INSERT INTO persona (clave, nombre, domicilio, telefono, correo_electronico, fecha_nacimiento, genero) VALUES(?,?,?,?,?,?,?) ");
        ps.setString(1, txtClave.getText());
        ps.setString(2, txtNombre.getText());
        ps.setString(3, txtDomicilio.getText());
        ps.setString(4, txtTelefono.getText());
        ps.setString(5, txtEmail.getText());
        ps.setDate(6, Date.valueOf(txtFecha.getText()));
        ps.setString(7, cbxGenero.getSelectedItem().toString());

        int res = ps.executeUpdate();

        if (res > 0) {
            JOptionPane.showMessageDialog(null, "Persona Guardada");
        } else {
            JOptionPane.showMessageDialog(null, "Error al Guardar persona");
        }
			
	limpiarCajas();
        con.close();

    } catch (HeadlessException | SQLException e) {
        System.err.println(e);
    }
}

Método del botón para buscar

private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {

    Connection con;

    try {
        con = getConection();
        ps = con.prepareStatement("SELECT * FROM persona WHERE clave = ?");
        ps.setString(1, txtClave.getText());

        rs = ps.executeQuery();

        if (rs.next()) {
            txtId.setText(rs.getString("id"));
            txtNombre.setText(rs.getString("nombre"));
            txtDomicilio.setText(rs.getString("domicilio"));
            txtTelefono.setText(rs.getString("telefono"));
            txtEmail.setText(rs.getString("correo_electronico"));
            txtFecha.setText(rs.getString("fecha_nacimiento"));
            cbxGenero.setSelectedItem(rs.getString("genero"));
        } else {
            JOptionPane.showMessageDialog(null, "No existe una persona con la clave");
            limpiarCajas();
        }

    } catch (HeadlessException | SQLException e) {
        System.err.println(e);
    }
}

Método del botón para editar

private void btnModificaActionPerformed(java.awt.event.ActionEvent evt) {

    Connection con;

    try {
        con = getConection();
        ps = con.prepareStatement("UPDATE persona SET clave=?, nombre=?, domicilio=?, telefono=?, correo_electronico=?, fecha_nacimiento=?, genero=? WHERE id=?");
        ps.setString(1, txtClave.getText());
        ps.setString(2, txtNombre.getText());
        ps.setString(3, txtDomicilio.getText());
        ps.setString(4, txtTelefono.getText());
        ps.setString(5, txtEmail.getText());
        ps.setDate(6, Date.valueOf(txtFecha.getText()));
        ps.setString(7, cbxGenero.getSelectedItem().toString());
        ps.setString(8, txtId.getText());

        int res = ps.executeUpdate();

        if (res > 0) {
            JOptionPane.showMessageDialog(null, "Persona Modificada");
        } else {
            JOptionPane.showMessageDialog(null, "Error al Modificar persona");
        }
        limpiarCajas();
        con.close();

    } catch (HeadlessException | SQLException e) {
        System.err.println(e);
    }
}

Método del botón para eliminar

private void btnEliminaActionPerformed(java.awt.event.ActionEvent evt) {

    Connection con;

    try {
        con = getConection();
        ps = con.prepareStatement("DELETE FROM persona WHERE id=?");
        ps.setInt(1, Integer.parseInt(txtId.getText()));

        int res = ps.executeUpdate();

        if (res > 0) {
            JOptionPane.showMessageDialog(null, "Persona Eliminada");
        } else {
            JOptionPane.showMessageDialog(null, "Error al eliminar persona");
        }
        limpiarCajas();
        con.close();

    } catch (HeadlessException | NumberFormatException | SQLException e) {
        System.err.println(e);
    }
}

Método del botón limpiar

private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {                                           
    limpiarCajas();
}

Como instrucción adicional podemos hacer que el campo de texto para guardar temporalmente el ID del registro no sea visible. Para esto agregamos la propiedad setVisible(false) a la variable txtId, esto será en el método constructor después de iniciar los componentes.

public persona() {
    initComponents();
    txtId.setVisible(false);
}

Ejecutar proyecto CRUD

Para ejecutar el proyecto damos clic derecho dentro de la clase y seleccionar Run File para ejecutar el proyecto.

Resultado

Puedes crear tu propio diseño, quitar o agregar campos al formulario y adaptarlo a tus necesidades.

Bonus

Si quieres una explicación más detallada sobre este proyecto puedes ver el siguiente vídeo:

También puedes ver y descargar el proyecto desde GitHub: https://github.com/mroblesdev/CRUD-Java-MySQL

Si está en tus posibilidades puedes invitarme un café ☕️, una cerveza 🍺 o realizar una donación 🎁 vía Paypal https://www.paypal.com/paypalme/markorobles?locale.x=es_XC

Espero que este tutorial te haya servido, nos vemos hasta la próxima.