CRUD de Productos con Java y MySQL


El siguiente Crud sirve para manejar productos en una base de datos, el formulario cuenta con los campos: nombre, descripcion, codigo de barras, precio de venta, precio de compra, categoria y mas.

En el articulo anterior vimos como crear un CRUD de categorias, ese modulo lo vamos a utilizar en este articulo, en caso que no lo quieran utilizar solo tienen que omitir el campo category_id y el codigo relacionado con el modulo anterior.

Tambien debes saber como Conectar NetBeans, Java y Mysql para ver como se usa el conector de la base de datos.

Base de datos

Para la base de datos de este modulo vamos a usar el esquema del inventio lite ya que es una base de datos practica y con la que hemos trabajado bastante.

En este caso trabajaremos con la tabla product.

create database inventiolite;
use inventiolite;

create table product(
	id int not null auto_increment primary key,
	image varchar(255),
	barcode varchar(50),
	name varchar(50),
	description text,
	inventary_min int default 10,
	price_in float,
	price_out float,
	unit varchar(255),
	presentation varchar(255),
	user_id int,
	category_id int,
	created_at datetime,
	is_active boolean default 1,
	foreign key (category_id) references category(id)
);

La tabla cuenta con varios campos, aunque estamos usando la mayoria de campos, hay varios que no vamos a usar como el campo de imagen.

Codigo

El archivo Database.java contiene los datos para conectarnos a la base de datos.

public class Database {
    public static Database instance;
    public Connection connection;

    public static Database getInstance(){
        if(instance==null){
            instance = new Database();
        }
        return instance;
    }
   public static Connection getConnection() throws SQLException{
    String url = "jdbc:mysql://localhost:3306/inventiolite";
    String user = "root";
    String pass = "";
    return DriverManager.getConnection(url, user,pass);
    }
}

Esta clase para la conexion la vamos a estar usando en la mayoria de proyectos CRUD que desarrollemos.

El archivo Product.java contiene la clase Product que sirve para la estructura de los productos y para crear listas y objetos con todos los datos que tiene un producto.

public class Product {
    int id;
    String name;
    String barcode;
    String description;
    String unit;
    String presentation;
    Double price_in;
    Double price_out;
    int inventary_min;
    int category_id;
}

El siguiente archivo importante es ProductController.java en el cual tenemos las funciones o metodos de Agregar, Listar, Actualizar y Eliminar productos, estas funciones posteriormente las vamos a ir llamando desde los formularios.

public class ProductController {
        public List<Product> getProducts() throws SQLException{
        Database db = Database.getInstance();
        ResultSet rs = null;
        PreparedStatement st = db.getConnection().prepareStatement("select * from product");
        rs = st.executeQuery();
        List<Product> cat = new ArrayList<Product>() ;

        while(rs.next()){
        Product cate = new Product();
        cate.id= rs.getInt("id");
        cate.name = rs.getString("name");
        cate.barcode = rs.getString("barcode");
        cate.description = rs.getString("description");
        cate.price_in = rs.getDouble("price_in");
        cate.price_out = rs.getDouble("price_out");
        cate.unit = rs.getString("name");
        cate.presentation = rs.getString("name");
        cate.inventary_min = rs.getInt("inventary_min");
        cate.category_id = rs.getInt("category_id");
        cat.add(cate);
        }
        return cat;
    }
            public Product getProductById(int id) throws SQLException{
        Database db = Database.getInstance();
        ResultSet rs = null;
        PreparedStatement st = db.getConnection().prepareStatement("select * from product where id = "+id);
        rs = st.executeQuery();
        //List<Product> cat = new ArrayList<Product>() ;
        Product cate = null;
        while(rs.next()){
        cate = new Product();
        cate.id= rs.getInt("id");
        cate.name = rs.getString("name");
        cate.barcode = rs.getString("barcode");
        cate.description = rs.getString("name");
        cate.price_in = rs.getDouble("price_in");
        cate.price_out = rs.getDouble("price_out");
        cate.unit = rs.getString("unit");
        cate.presentation = rs.getString("presentation");
        cate.inventary_min = rs.getInt("inventary_min");
        cate.category_id = rs.getInt("category_id");
        }
        return  cate;
    }
    public void addProduct(String name, String barcode, String description, double price_in, double price_out, String unit, String presentation, int inventary_min, int category_id) throws SQLException{
        Database db = Database.getInstance();
        Statement s = db.getConnection().createStatement();
        String query1 = "insert into product (name,barcode, description, price_in, price_out, unit, presentation, inventary_min, category_id, created_at) value (\""+name+"\",\""+barcode+"\",\""+description+"\",\""+price_in+"\",\""+price_out+"\",\""+unit+"\",\""+presentation+"\",\""+inventary_min+"\",\""+category_id+"\",NOW())";
        s.executeUpdate(query1);
     }

    public void updateProduct(int id, String name,String barcode, String description, double price_in, double price_out, String unit, String presentation, int inventary_min, int category_id) throws SQLException{
        Database db = Database.getInstance();
        Statement s = db.getConnection().createStatement();
        String query1 = "update product set name = \""+name+"\",barcode = \""+barcode+"\",description = \""+description+"\",price_in = \""+price_in+"\",price_out = \""+price_out+"\",unit = \""+unit+"\",presentation = \""+presentation+"\",inventary_min = \""+inventary_min+"\",category_id = \""+category_id+"\" where id = "+id;
        s.executeUpdate(query1);
     }
    public static void deleteProduct(int id) throws SQLException{
        Database db = Database.getInstance();
        Statement s = db.getConnection().createStatement();
        String query1 = "delete from product where id = "+id;
        s.executeUpdate(query1);
     }
}

El resto del codigo corresponde a el uso de estas clases ya en los formularios, esos codigos se los dejo en el apartado de descarga.

Formularios

Les comparto imagenes de los formularios de Vista de Productos, Nuevo Producto y Modificar Productos.

Vista de Productos

En la vista de productos estan los botones de Agregar Producto, Ver las categorias (Modulo CRUD), Actualizar Sirve para recargar los datos despues de Agregar o Modificar.

La opcion de modificar seleccionado toma el elemento seleccionado de la tabla y abre el formulario de editar producto.

La opcion de eliminar seleccionado elimina el elemento seleccionado de la tabla y de la base de datos.

Nuevo Producto

El formulario de nuevo producto cuenta con sus campos de texto y numericos.

El campo de categorias es un ComboBox que se recarga de la tabla de Categorias.

Editar Producto

El formulario de editar producto se recarga con los datos de la base de datos.

Descargar

A continuacion el enlace para descargar los archivos, la decarga incluye todo el proyecto para usarlo en el NetBeans.

Link: https://www.dropbox.com/scl/fi/tnpym9i11yxbhdzs3avnq/ProductsCrud-v2.zip?dl=0&rlkey=wyxv2jdi28xqhkvuue2r5buw2

La descarga tambien incluye el modulo de Categorias.

Comentarios

Esperamos sus dudas y comentarios en nuestras paginas de Facebook y via Inbox.

Leave a comment