lunes, 6 de agosto de 2012

SQLite con Java en Eclipse

SQLite es un ligero sistema de gestión de base de datos que soporta la mayor parte del estándar SQL-92. En este post voy a mostrar la forma de cómo integrar esta biblioteca con una aplicación desarrollada en Java. Muchas son las aplicaciones que hacen uso de SQLite, como por ejemplo: Firefox, Skype, OpenOffice, etc. Y es que la relación entre la cantidad de recursos que demanda y su rendimiento lo hacen idóneo para aplicaciones en las cuales no se va a manejar grandes cantidades de datos ni múltiples transacciones. Otro factor importante es la distribución de las aplicaciones. Supongamos que hemos desarrollado una versátil aplicación para mensajería instantánea y necesitamos manejar las agendas de los usuarios. Pensar en distribuir scripts de base de datos junto al instalador o pedirle al usuario que como requisito deba tener instalado algún motor de base de datos es algo inconcebible. Obviamente existen otras opciones, sin embargo para este post nos centraremos en el uso de SQLite.
La aplicación que les muestro es un sencillo mantenimiento a una tabla de productos que será representado por la clase producto.

package com.blogspot.rolandopalermo.bean;

public class Producto {

    private long id;
    private String nombre;
    private double precioUnitario;
    private int stock;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public double getPrecioUnitario() {
        return precioUnitario;
    }

    public void setPrecioUnitario(double precioUnitario) {
        this.precioUnitario = precioUnitario;
    }

    public int getStock() {
        return stock;
    }

    public void setStock(int stock) {
        this.stock = stock;
    }

    @Override
    public String toString() {
        return nombre;
    }
}

La clase encargada de ejecutar las sentencias Sql es la siguiente:

package com.blogspot.rolandopalermo.sql;

import java.sql.Connection;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import com.blogspot.rolandopalermo.bean.Producto;
import com.blogspot.rolandopalermo.util.ConexionJDBC;
import com.blogspot.rolandopalermo.util.ResultExecuteQuery;

public class SqlProducto {

    public void crearProducto(Producto producto) {
        String mensaje = "";
        boolean fallo = false;
        ConexionJDBC conn = new ConexionJDBC();
        Connection connection = conn.getConnection();
        Statement stmt = null;
        String sql = "INSERT INTO TB_PRODUCTOS (txtNombre, txtPrecioUnitario, txtStock) VALUES ('"
                + producto.getNombre()
                + "',"
                + producto.getPrecioUnitario()
                + "," + producto.getStock() + ");";
        try {
            stmt = connection.createStatement();
            stmt.execute(sql);
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
            }
        } catch (Exception e) {
            mensaje = e.getMessage();
            fallo = true;
        } finally {
            if (!fallo) {
                JOptionPane.showMessageDialog(new JFrame(),
                        "El producto se ha guardado correctamente.", "Éxito",
                        JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(new JFrame(),
                        "No se ha podido completar la operación.n" + mensaje,
                        "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    public void actualizarProducto(Producto producto) {
        String mensaje = "";
        boolean fallo = false;
        ConexionJDBC conn = new ConexionJDBC();
        Connection connection = conn.getConnection();
        Statement stmt = null;
        String sql = "UPDATE TB_PRODUCTOS SET txtNombre='"
                + producto.getNombre() + "', txtPrecioUnitario="
                + producto.getPrecioUnitario() + ", txtStock="
                + producto.getStock() + " WHERE id=" + producto.getId() + ";";
        try {
            stmt = connection.createStatement();
            stmt.execute(sql);
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
            }
        } catch (Exception e) {
            mensaje = e.getMessage();
            fallo = true;
        } finally {
            if (!fallo) {
                JOptionPane.showMessageDialog(new JFrame(),
                        "El producto se ha actualizado correctamente.",
                        "Éxito", JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(new JFrame(),
                        "No se ha podido completar la operación.n" + mensaje,
                        "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    public void eliminarProducto(long id) {
        String mensaje = "";
        boolean fallo = false;
        try {
            ConexionJDBC conn = new ConexionJDBC();
            Connection connection = conn.getConnection();
            Statement stmt = null;
            String sql = "DELETE FROM TB_PRODUCTOS WHERE id=" + id + ";";
            stmt = connection.createStatement();
            stmt.execute(sql);
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                    mensaje = e.getMessage();
                    fallo = true;
                }
            }
        } catch (Exception e) {
            // TODO: handle exception
            mensaje = e.getMessage();
            fallo = true;
        } finally {
            if (!fallo) {
                JOptionPane.showMessageDialog(new JFrame(),
                        "El producto se ha eliminado correctamente.", "Éxito",
                        JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(new JFrame(),
                        "No se ha podido completar la operación.n" + mensaje,
                        "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    @SuppressWarnings({"rawtypes", "unchecked"})
    public List<Producto>;

    buscarProductos() {
        List<Producto> productos = new ArrayList<Producto>();
        HashMap column = new HashMap();
        column.put("String:0", "id");
        column.put("String:1", "txtNombre");
        column.put("String:2", "txtPrecioUnitario");
        column.put("String:3", "txtStock");
        String sql = "SELECT * FROM TB_PRODUCTOS";
        ResultExecuteQuery resultExecuteQuery = new ResultExecuteQuery(sql,
                column);
        HashMap<Integer, HashMa> mapResultado = resultExecuteQuery.getMap();
        HashMap res = null;
        for (int i = 0; i &amp; lt; mapResultado.size();
        i++
        
            ) {
   Producto producto = new Producto();
            res = (HashMap) mapResultado.get(i);
            Long id = Long.parseLong(res.get("id").toString());
            producto.setId(id);
            producto.setNombre(res.get("txtNombre").toString());
            Double precio = Double.parseDouble(res.get("txtPrecioUnitario").toString());
            producto.setPrecioUnitario(precio);
            Integer stock = Integer.parseInt(res.get("txtStock").toString());
            producto.setStock(stock);
            productos.add(producto);
        }
        return productos;
    }
}

Aquí les dejo el código fuente del proyecto que pueden importar a su workspace de Eclipse.


La base de datos pueden descargarla del siguiente enlace: base de datos. Este archivo deberá estar en la raíz del disco C:\.

Aquí algunos pantallazos de la aplicación:




Eso es todo por ahora. Espero les sea de utilidad y no dejen de seguir a este blog a través de facebook para enterarse de muchas novedades.

2 comentarios:

Anónimo dijo...

Gracias hermano (Y)

O.z.m.A dijo...

tengo una pregunta... con que creaste la base de datos?

Publicar un comentario