viernes, 14 de marzo de 2014

Primera Aplicación en java Swing Usando Dao y MVC



Primera Aplicación en java Swing Usando Dao y MVC
En este primer ejemplo desarrollaremos un pequeño sistema para dar mantenimiento a una tabla de base de datos. Como la utilizaremos para ponernos al día e ir entrando en calor, será lo más sencillo posible.

1. Ambiente de desarrollo
- JDK v1.7.0.27
- Netbeans v7.1.2
- MySql v5.1.61

2. Tecnologías de desarrollo
- Java Swing
- JDBC

3. Manos a la obra
3.1. Como mencioné al inicio de este post, la aplicación que crearemos será para darle mantenimiento a una tabla de base de datos: tabla de clientes.
Para esto, primero creamos la base de datos y la tabla clientes mediante el siguiente estructura:



3.2. Luego de tener nuestra base de datos "swdefabrica" y la tabla clientes, vamos al Netbeans y creamos un nuevo proyecto web. Para esto, pulsamos las teclas CTRL + N, seleccionamos Java y Java Application, le asignamos un nombre finalizamos.

3.3. Agregamos las librerias que necesitemos, en este caso son las necesarias para conexión a base de datos (mysql)
 

3.4 En el paquete edu.pe.cibertec.sql creamos la clase (clic derecho en el paquete, new, Java class) ConectaBD, para poder conectarnos con nuestra base de datos MySql.

package edu.pe.cibertec.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConectaBD {
   public Connection getConnection (){
       Connection cn = null;
       try {
          Class.forName("com.mysql.jdbc.Driver");
          cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/prueba",
                  "root", "root");
       } catch (SQLException e2) {
           System.out.println("Error : " + e2.getMessage());
       }catch(Exception e){
           System.out.println("Error: " + e.getMessage());
       }
       return  cn;
   }
}


3.5. Luego de esto creamos nuestro objeto Cliente (la clase cliente con todos los atributos necesarios) en el paquete edu.pe.cibertec.dto. Para esto hacemos clic derecho en el paquete, new, Java class.




3.6. Luego de crear nuestra clase Cliente, y para manejar todos sus métodos (o acciones que podremos realizar sobre un cliente) creamos la interfaz ClienteDAO en el paquete edu.pe.cibertec.dao (clic derecho en el paquete, new, Java interface) y la implementamos mediante la clase ClienteDAOImpl (en estas capas se realiza el trabajo con conexión a base de datos) que creamos en el paquete edu.pe.cibertec.dao.impl (clic derecho en el paquete, new, Java class), como se ven en las siguientes codigo:

ClienteDAO
package edu.pe.cibertec.dao;
import edu.pe.cibertec.dto.Cliente;
import java.util.List;
public interface ClienteDao {
    public List<Cliente> list();
    public String insertar (Cliente cliente);
    public Integer idCliente();
    public Cliente get(Integer id);
    public String delete (Integer id);
    public String update (Cliente cliente);
}

Clase ClienteDAOImpl
package edu.pe.cibertec.dao.impl;

import edu.pe.cibertec.dao.ClienteDao;
import edu.pe.cibertec.dto.Cliente;
import edu.pe.cibertec.sql.ConectaBD;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ClienteDaoImpl implements ClienteDao {

    public ConectaBD db;

    public ClienteDaoImpl() {
        db = new ConectaBD();
    }

    @Override
    public List<Cliente> list() {
        List<Cliente> list = null;
        String sql = "select * from cliente";
        try {
            Connection cn = db.getConnection();
            PreparedStatement st = cn.prepareStatement(sql);
            ResultSet rs = st.executeQuery(sql);
            list = new ArrayList<Cliente>();
            while (rs.next()) {
                Cliente c = new Cliente();
                c.setIdcliente(rs.getInt(1));
                c.setNombre(rs.getString(2));
                c.setApellidos(rs.getString(3));
                c.setDni(rs.getString(4));
                c.setDireccion(rs.getString(5));
                list.add(c);
            }
        } catch (SQLException e) {
            System.out.println("Error : " + e.getMessage());
        }
        return list;
    }

    @Override
    public String insertar(Cliente cliente) {
        String result = null;
        String sql = "INSERT INTO cliente (nombre,apellidos,dni,direccion)"
                + "VALUES (?,?,?,?)";
        try {
            Connection cn = db.getConnection();
            PreparedStatement ps = cn.prepareStatement(sql);
            ps.setString(1, cliente.getNombre());
            ps.setString(2, cliente.getApellidos());
            ps.setString(3, cliente.getDni());
            ps.setString(4, cliente.getDireccion());
            ps.executeUpdate();
            ps.close();
            cn.close();
        } catch (SQLException e) {
            result = e.getMessage();
        }
        return result;
    }

    // es es un metodo que obtiene un sele
    @Override
    public Integer idCliente() {
        Integer id = 0;
       String sql = "select max(idcliente) + 1 as codigo from cliente";
        try {
            Connection cn = db.getConnection();
            PreparedStatement ps = cn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                id = rs.getInt(1);
            }
            ps.close();
            cn.close();
            System.out.println("" + id.getClass());
        } catch (SQLException e) {
            System.out.println("Error : " + e.getMessage());
        }
        return id;
    }

    @Override
    public Cliente get(Integer id) {
        Cliente cliente = null;
        String sql = "select * from cliente where idcliente=?";
        try {
            Connection cn = db.getConnection();
            PreparedStatement ps = cn.prepareStatement(sql);
            ps.setInt(1, id);

            ResultSet rs = ps.executeQuery();
            cliente = new Cliente();
            if (rs.next()) {
                cliente.setIdcliente(rs.getInt(1));
                cliente.setNombre(rs.getString(2));
                cliente.setApellidos(rs.getString(3));
                cliente.setDni(rs.getString(4));
                cliente.setDireccion(rs.getString(5));
            }
            cn.close();
            ps.close();
        } catch (SQLException e) {
            System.out.println("Error : " + e.getMessage());
        }
        return cliente;
    }

    @Override
    public String delete(Integer id) {
        String result = null;
        String sql = "delete from cliente where idcliente =?";
        try {
            Connection cn = db.getConnection();
            PreparedStatement ps = cn.prepareStatement(sql);
            ps.setInt(1, id);
            ps.executeUpdate();
        } catch (SQLException e) {
            result = e.getMessage();
        }
        return result;
    }

    @Override
    public String update(Cliente cliente) {
        String result = null;
        String sql = "UPDATE cliente"
                + " SET nombre =?,apellidos =?,dni =?,direccion =?"
                + "WHERE idcliente = ?";
        try {

            Connection cn = db.getConnection();
            PreparedStatement ps = cn.prepareStatement(sql);
            ps.setString(1, cliente.getNombre());
            ps.setString(2, cliente.getApellidos());
            ps.setString(3, cliente.getDni());
            ps.setString(4, cliente.getDireccion());
            ps.setInt(5, cliente.getIdcliente());
            ps.executeUpdate();
            cn.close();
            ps.close();
        } catch (SQLException e) {
            result = e.getMessage();
        }
        return result;
    }
}


3.7. Luego creamos en el paquete edu.pe.cibertec.negocio (clic derecho en el paquete, new, Java class), como se ven en las siguientes codigo:
package edu.pe.cibertec.negocio;

import edu.pe.cibertec.dao.ClienteDao;
import edu.pe.cibertec.dao.impl.ClienteDaoImpl;
import edu.pe.cibertec.dto.Cliente;
import java.util.List;
public class ClienteNE {

    ClienteDao clienteDao;
    public ClienteNE() {
        clienteDao = new ClienteDaoImpl();
    }

    public List<Cliente> list() {
        return clienteDao.list();
    }

    public String insertarCliente(Cliente cliente) {
        return clienteDao.insertar(cliente);
    }

    public Integer idCliente(){
        return clienteDao.idCliente();
    }

    public Cliente getInteger(Integer id) {

        return clienteDao.get(id);
    }

    public String delete(Integer id) {
        return clienteDao.delete(id);
    }
    public String update(Cliente cliente) {
        return clienteDao.update(cliente);
    }
}

3.8. Luego creamos en el paquete edu.pe.cibertec.presentacion
 (clic derecho en el paquete, new, Jframe Form), como se ven en las siguientes codigo:


public ClienteNE clienteNE;
  public List<Cliente> lista;
  public Cliente cliente;
    DefaultTableModel modelo;
  public boolean  opcion=false;
 
    public FrmManCLiente() {
        initComponents();
        this.setLocationRelativeTo(null);
        this.setTitle("Acceso a base de datos Mysql");
        clienteNE= new ClienteNE();
        codCliente();
        cargarCliente();
    }
public final  void cargarCliente(){
    String[] titulos = {"Codigo", "Nombres", "Apellidos", "Dni", "Direccion"};
     modelo = new DefaultTableModel(null, titulos);
    String[] fila = new String[5];
    lista= clienteNE.list();
    for(Cliente c :lista){
        fila[0]=String.valueOf(c.getIdcliente());
        fila[1]=c.getNombre();
        fila[2]=c.getApellidos();
        fila[3]=c.getDni();
        fila[4]=c.getDireccion();
        modelo.addRow(fila);
       
    }
    tblCliente.setModel(modelo);
}

public void asignarEntradas (){
    cliente =new Cliente();
    cliente.setIdcliente(Integer.parseInt(txtCodigo.getText()));
    cliente.setNombre(txtNombre.getText());
    cliente.setApellidos(txtApellidos.getText());
    cliente.setDni(txtDni.getText());
    cliente.setDireccion(txtDireccion.getText());
    System.out.println("apellidos: " + cliente.getApellidos());
    System.out.println("Nombres: " + cliente.getNombre());
}

public void BuscarClinte (Integer id ){
    cliente = clienteNE.getInteger(id);
    if(cliente.getIdcliente()!=null){
        txtCodigo.setText(String.valueOf(cliente.getIdcliente()));
        txtNombre.setText(String.valueOf(cliente.getNombre()));
        txtApellidos.setText(String.valueOf(cliente.getApellidos()));
        txtDni.setText(String.valueOf(cliente.getDni()));
        txtDireccion.setText(String.valueOf(cliente.getDireccion()));
    }else{
        JOptionPane.showMessageDialog(null, "Datos no encontrados");
    }
}

public void eliminarCliente (){
    Integer id = Integer.parseInt(txtCodigo.getText());
    String rpta = clienteNE.delete(id);
    if(rpta ==null){
        JOptionPane.showMessageDialog(null, "cliente Eliminado");
    }else{
        JOptionPane.showMessageDialog(null, "Error al eliminar cliente" + rpta);
    }
}
public void codCliente (){
    Integer id=clienteNE.idCliente();
    txtCodigo.setText(String.valueOf(id)    ); 
}

public void insertarCliente (){
    String rpta;
   asignarEntradas();
    rpta=clienteNE.insertarCliente(cliente);
    if(rpta == null){
        JOptionPane.showMessageDialog(null, "Cliente Agregado con exito");
    }else{
         JOptionPane.showMessageDialog(null, "Error en Ingreso" + rpta);
    }
}

public void actualizarCliente (){
    String rpta;
   asignarEntradas();
    rpta=clienteNE.update(cliente);
    if(rpta == null){
        JOptionPane.showMessageDialog(null, "Cliente Agregado con exito");
    }else{
         JOptionPane.showMessageDialog(null, "Error en Ingreso" + rpta);
    }
}

Codigo del formulario


  private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
        insertarCliente();
        cargarCliente();
    }                                         

    private void txtDireccionActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:
    }                                            

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        Integer id = Integer.valueOf(txtCodigo.getText());
        BuscarClinte(id);

    }                                        

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        eliminarCliente();
        cargarCliente();
    }                                          

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:
        actualizarCliente();
        cargarCliente();
    }                                           

Formulario


3 comentarios:

  1. Oye Eras no me deja llenar la tabla, me marca error este error:
    - Error: Can't use query methods that take a query string on a PreparedStatement.

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar