Para el siguiente ejemplo se necesitan los siguientes programas.
Paso 1:
Activamos el wampServer.
WampServer Activado
Paso 2:
Abrimos MySQL Workbench
2.1 Primero conectamos al wampServer.
2.2 Creamos la base de datos en este caso se llama farmacia.
Paso 3:
3.1 Abrimos NetBeans creamos un proyecto nuevo con los paquetes y las siguientes
clases.
3.2 Se añade el jar mysql-connector-java-5.1.40
Explicación de las clases creadas en el proyecto.
Paquete Vista
Clase JFrameCliente.java
Paquete Modelo
Clase ClienteVO.java
package Modelo;
public class ClienteVO {
//Atributos de la clase Cliente
private String nombre;
private String id;
private String direccion;
//Método Constructor sin parametros
public ClienteVO() {
this.nombre="";
this.id="";
this.direccion="";}
//Método Constructor con parametros
public ClienteVO(String id, String nombre, String direccion) {
this.nombre = nombre;
this.id = id;
this.direccion = direccion;}
//Getters Setters
public String getNombre() {
return nombre;}
public void setNombre(String nombre) {
this.nombre = nombre;}
public String getId() {
return id;}
public void setId(String id) {
this.id = id;}
public String getDireccion() {
return direccion;}
public void setDireccion(String direccion) {
this.direccion = direccion;}
Paquete Modelo
Clase Conexion.java
package Modelo;
import java.sql.*;
public class Conexion {
String bd="farmacia"; //nombre de la base
String login="root"; //usuario por defecto es root
String passw="";//en este caso no tiene contraseña
String url="jdbc:mysql://localhost/" + bd;//se conecta al localhost con la base
Connection objConex=null;//inicializa el objeto de tipo Connection
public Conexion (){
try {
Class.forName("com.mysql.jdbc.Driver");
objConex = DriverManager.getConnection(url,login,passw);//Nos devuelve la
conexion que tiene 3 parametros
if(objConex!=null)
System.out.println("Conexion a BD Farmacia ok");
} catch (ClassNotFoundException ex) {
System.out.println(ex);
} catch (SQLException o){
System.out.println(o);
public Connection obtenerConexion(){
return objConex;}
Paquete Modelo
Clase ClienteDAO.java
package Modelo;
import java.sql.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class ClienteDAO {
Conexion con; //Objeto de tipo conexion
public ClienteDAO() {
con=new Conexion();
public void adicionarCliente(ClienteVO cli){
Connection acceso = con.obtenerConexion(); //Se obtiene la conexion
//Se inserta de acuerdo al mismo nombre de los atributos de la base de datos
String sql="INSERT INTO cliente(id_Cliente,nombre_Cliente,direccion_Cliente)
VALUES(?,?,?)";
try{
PreparedStatement ps= acceso.prepareStatement(sql);//Establece la conexion
con la base de datos
//Se inserta los datos del cliente utilizando el objeto de tipo clienteVO
//y accediendo a los métodos getters
ps.setString(1, cli.getId());
ps.setString(2, cli.getNombre());
ps.setString(3, cli.getDireccion());
//Se ejecutan los datos insertados
ps.executeUpdate();
}catch(SQLException ex){
System.out.println(ex);// En caso de algún error con la conexión a la base será
notificado
}}
public ArrayList<ClienteVO> mostrarClientes(){
//Se instancia una lista de tipo ClienteVO
ArrayList <ClienteVO> listaB=new ArrayList <ClienteVO>();
//Se instancia un objeto de tipo ClienteVO
ClienteVO cli;
try{
Connection acceso = con.obtenerConexion();
//Establece la conexion con la base
PreparedStatement ps= acceso.prepareStatement("select * from cliente");
//Se ejecuta el Query de la base
ResultSet rs=ps.executeQuery();
while (rs.next()){
//se establecen los datos en la tabla de acuerdo al orden
//Utilizando los métodos setter
cli=new ClienteVO();
cli.setId(rs.getString(1));
cli.setNombre(rs.getString(2));
cli.setDireccion(rs.getString(3));
//Se añade a la lista de tipo clienteVO
listaB.add(cli);
}catch(SQLException ex){
//Se notifica se hay algun error con la conección
System.out.println(ex);
//Se retorna la lista
return listaB;}
public void eliminarCliente(String idEliminar,JTable jTable_Clientes){
//Los parametros para este método son los id a eliminar
//Y la tabla de los clientes ingresados
//Se instancia un objeto de tipo Conexion
Conexion objConexion=new Conexion();
//Se obtiene el acceso a la base
Connection acceso = objConexion.obtenerConexion();
//Se obtiene la seleccion que se desea eliminar
//guardando la fila que se seleccione
int fila=jTable_Clientes.getSelectedRow();
//Se extrae el idCliente de la seleccion que se realize
idEliminar=jTable_Clientes.getValueAt(fila,0).toString();
//Notificacion de eliminacion del cliente segun su id
JOptionPane.showMessageDialog(null,"Se ha eliminado el "+idEliminar);
try{
//Se establece la conexion con la base de datos
PreparedStatement pst=acceso.prepareStatement("DELETE FROM cliente
WHERE id_cliente='"+idEliminar+"'");
//Se ejecuta el comando delete segun el idEliminar del cliente
pst.executeUpdate();
}catch(Exception e){
//Se notifica si hubo algun error con la conexion a la base de datos
System.out.println(e);
}}
public void modificar(String idModificar,JTextField txtName,JTextField txtDireccion){
//Para este método se seleccionará el id de la tabla a modificar
//Se instancia un objeto de tipo Conexion
Conexion objConexion=new Conexion();
//Se obtiene la conexion a la base de datos
Connection acceso = objConexion.obtenerConexion();
try{
//Se establece la conexion con la base de datos
//Los únicos datos que se pueden notificar es el nombre y la dirección
PreparedStatement pst=acceso.prepareStatement("UPDATE cliente SET
nombre_cliente='"+txtName.getText()+"',direccion_cliente='"+txtDireccion.getText()+"'
WHERE id_cliente='"+idModificar+"' ");
//Se extrae los datos de la base a los JTextField del JFrame de la vista
txtName.getText();
txtDireccion.getText();
//Se executa el update con los nuevos datos insertados
pst.executeUpdate();
}catch(Exception e){
//Se notifica si hubo algun error con la base de datos
System.out.print(e.getMessage());
}}
Paquete Controlador
Clase ControladorCliente.java
package Controlador;
import Modelo.ClienteDAO;
import Modelo.ClienteVO;
import Vista.jFrameCliente;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
public class ControladorCliente implements ActionListener{
//Se crea un objeto de tipo JFrameCliente que sirve para la vista
jFrameCliente objVista = new jFrameCliente();
//Objetos de tipo cliente DAO y clientoVO
ClienteDAO objDAO = new ClienteDAO();
ClienteVO objVO=new ClienteVO();
//Variables para poder extraer los id que servirán para
//eliminar y modificar
String idModificar="";
String idEliminar="";
//Metodo Contructor
public ControladorCliente(jFrameCliente objVista){
this.objVista=objVista;
//Se añade las acciones de los botones
//Explicados en el jFrameCliente.java
objVista.btnAdd.addActionListener(this);
objVista.btnClear.addActionListener(this);
objVista.btnList.addActionListener(this);
objVista.jmModificar.addActionListener(this);
objVista.jmEliminar.addActionListener(this);
objVista.btnUpdate.addActionListener(this);
public void actionPerformed(ActionEvent e){
//Se obtiene la accion de cada boton
//Boton Ingresar
if (e.getSource() == objVista.btnAdd){
//Se extrae el texto de los JTextfiel del JFrame
String nombre = objVista.txtName1.getText();
String id = objVista.txtId.getText();
String dir = objVista.txtAddress.getText();
JOptionPane.showMessageDialog(null, "Cliente Registrado");
//Objeto de tipo ClienteVO con parámetros
objVO = new ClienteVO(id,nombre,dir);
//Metodo para insertar cliente
objDAO.adicionarCliente(objVO);
//Boton Limpiar
else if(e.getSource()==objVista.btnClear){
//Limpia los JTextField del JFrame
this.objVista.txtId.setText(null);
this.objVista.txtName1.setText(null);
this.objVista.txtAddress.setText(null);
//Boton Mostrar
else if(e.getSource() == objVista.btnList){
//Lista de tipo ClienteVO
ArrayList <ClienteVO> lista = new ArrayList <ClienteVO>();
//Muestra todos los clientes en la tabla
lista=objDAO.mostrarClientes();
//Se desabilita la tabla para que no se pueda editar
String titulos[]={"ID","NOMBRE","DIRECCION"};
DefaultTableModel modeloT = new DefaultTableModel(null,titulos){
@Override
public boolean isCellEditable(int filas,int columnas){
if(columnas==3){
return true;
}else{
return false;
};
//Establece modelo de la tabla
objVista.jTable_Clientes.setModel(modeloT);
Object[] columna = new Object[3];
//Se añade una fila de acuerdo a los clientes ingresados
//y se extrae los datos con la ayuda de los getters
for (int i=0;i<lista.size();i++){
columna[0]=lista.get(i).getId();
columna[1]=lista.get(i).getNombre();
columna[2]=lista.get(i).getDireccion();
modeloT.addRow(columna);
//JMenuItem Eliminar de la tabla
else if(e.getSource()==objVista.jmEliminar){
//Se guarda la fila de la cual se quiere eliminar
int fila=objVista.jTable_Clientes.getSelectedRow();
//Se extrae el id de la fila a eliminar
idEliminar=objVista.jTable_Clientes.getValueAt(fila,0).toString();
//Se llama al método para eliminar de la base y de la tabla
objDAO.eliminarCliente(idEliminar,objVista.jTable_Clientes);
//JMenuItem Modificar de la tabla
else if(e.getSource()==objVista.jmModificar){
//Se guarda la fila de la cual se quiere modificar
int fila=objVista.jTable_Clientes.getSelectedRow();
if(fila>=0){
objVista.txtId.setText(objVista.jTable_Clientes.getValueAt(fila,0).toString());
objVista.txtName1.setText(objVista.jTable_Clientes.getValueAt(fila,1).toString());
objVista.txtAddress.setText(objVista.jTable_Clientes.getValueAt(fila,2).toString());
//El id no es modificable
objVista.txtId.setEditable(false);
//Se extrae el id a eliminar y sus datos a los JTextField del JFrame
idModificar=(objVista.jTable_Clientes.getValueAt(fila,0).toString());
}else{
//Se notificara si no se encuentran datos a notificar
JOptionPane.showMessageDialog(null,"No se encontro dato a modificar");
//Boton Modificar
else if(e.getSource()==objVista.btnUpdate){
//Se guarda los datos llamando al método y cambiando
//el nombre o la direccion
objDAO.modificar(idModificar, objVista.txtName1, objVista.txtAddress);
}
Paquete farmaciamvc
Clase GestorFarnmacia.java
package farmaciamvc;
import Controlador.ControladorCliente;
import Vista.jFrameCliente;
public class GestorFarmacia {
public static void main(String[] args) {
// TODO code application logic here
//Objeto de tipo de vista
jFrameCliente vistaC=new jFrameCliente();
//Controlar el JFrame
ControladorCliente control = new ControladorCliente(vistaC);
//Visible el JFrame
vistaC.setVisible(true);
Ejecución del Programa