CRUD con Java en capas

Todos algunas vez pasamos por hacer nuestros primeros conceptos y código con un modelo en capas que presenta un CRUD (create, read, update, delete) con conexión a alguna Base de Datos, aquí un ejemplo de empezar algo básico.

Comencemos crear un base de datos y crear las tablas, pero la imagen a continuación es un ejemplo cortado de una base de datos completa:

img1

presentamos tres tablas, donde la tabla estudiante es parte de la tabla persona; quiere decir que hereda todos los atributos (campos) y que también esta relacionada con tabla seccion. Para el proyecto utilizamos netbeans como IDE la cual creamos nuestro proyecto y presentamos en capas como se muestra en la siguiente gráfica.

img2

En el paquete datos agregamos 2 clases : la clase conexion.java, d_persona.java y d_estudiante.java

En el paquete de logica tendremos la clase :  l_estudiante.java

En el paquete de presentacion lo mismo con: p_estudiante.java y p_estudiante2.java

img3

A continuación código en las clases mencionadas:

conexion.java

package com.colegio.datos;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class conexion {
public String db=”bdcolegio”;
public String url=”jdbc:mysql://127.0.0.1:3307/” +db;
public String user=”root”;
public String pass=””;

public conexion() {

}

public Connection conectar(){
Connection link=null;

try {
//Class.forName(“org.gjt.mm.mysql.Driver”);
link=DriverManager.getConnection(this.url, this.user, this.pass);
System.out.print(“Conexion exitosa con la BD Colegio”);

} catch (SQLException e) {
JOptionPane.showConfirmDialog(null, e);

}
return link;
}
}

d_persona.java

package com.colegio.datos;
import java.sql.Date;

public class d_persona {
private int idpersona;
private String dni;
private String nombres;
private String ape_pat;
private String ape_mat;
private Date fecha_nac;
private String sexo;

public d_persona() {
}

public d_persona(int idpersona, String dni, String nombres, String ape_pat, Date fecha_nac, String sexo) {
this.idpersona = idpersona;
this.dni = dni;
this.nombres = nombres;
this.ape_pat = ape_pat;
this.fecha_nac = fecha_nac;
this.sexo = sexo;
}

public int getIdpersona() {
return idpersona;
}

public void setIdpersona(int idpersona) {
this.idpersona = idpersona;
}

public String getDni() {
return dni;
}

public void setDni(String dni) {
this.dni = dni;
}

public String getNombres() {
return nombres;
}

public void setNombres(String nombres) {
this.nombres = nombres;
}

public String getApe_pat() {
return ape_pat;
}

public void setApe_pat(String ape_pat) {
this.ape_pat = ape_pat;
}

public String getApe_mat() {
return ape_mat;
}

public void setApe_mat(String ape_mat) {
this.ape_mat = ape_mat;
}

public Date getFecha_nac() {
return fecha_nac;
}

public void setFecha_nac(Date fecha_nac) {
this.fecha_nac = fecha_nac;
}

public String getSexo() {
return sexo;
}

public void setSexo(String sexo) {
this.sexo = sexo;
}
}

d_estudiante.java

package com.colegio.datos;

public class d_estudiante extends d_persona{
private int id_seccion;
private String condicion;

public d_estudiante() {
}

public d_estudiante(int id_seccion, String condicion) {
this.id_seccion=id_seccion;
this.condicion = condicion;
}

public int getId_seccion() {
return id_seccion;
}

public void setId_seccion(int id_seccion) {
this.id_seccion = id_seccion;
}

public String getCondicion() {
return condicion;
}

public void setCondicion(String condicion) {
this.condicion = condicion;
}
}

l_estudiante.java

package com.colegio.logica;

import com.colegio.datos.conexion;
import com.colegio.datos.d_estudiante;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class l_estudiante {

private final conexion cnx = new conexion();
private final Connection cn = cnx.conectar();
private String sSQL = “”;
private String sSQL2 = “”;
public Integer totalregistros;

public DefaultTableModel mostrar(String buscar) {
DefaultTableModel modelo;
String[] titulos = {“ID”, “DNI”, “Nombres”, “Apellidos Paterno”, “Apellido Materno”, “Fecha Nacimiento”, “Sexo”, “id_seccion”, “Condicion”};
String[] registro = new String[9];

totalregistros = 0;
modelo = new DefaultTableModel(null, titulos);

sSQL = “select p.idpersona,p.dni_persona,p.nombres,p.ape_pat,p.ape_mat,p.fecha_nac,p.sexo,e.id_seccion,e.condicion ”
+ “from persona p inner join estudiante e ”
+ “on p.idpersona = e.idpersona where p.ape_pat like ‘%”
+ buscar + “%’ order by p.ape_pat asc”;

try {
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sSQL);

while (rs.next()) {
registro[0] = rs.getString(“idpersona”);
registro[1] = rs.getString(“dni_persona”);
registro[2] = rs.getString(“nombres”);
registro[3] = rs.getString(“ape_pat”);
registro[4] = rs.getString(“ape_mat”);
registro[5] = rs.getString(“fecha_nac”);
registro[6] = rs.getString(“sexo”);
registro[7] = rs.getString(“id_seccion”);
registro[8] = rs.getString(“condicion”);

totalregistros = totalregistros + 1;
modelo.addRow(registro);

}
rs.close();
st.close();
cn.close();
return modelo;
} catch (Exception e) {
JOptionPane.showConfirmDialog(null, e + ” error mostrar”);
return null;
}
}

public DefaultTableModel BuscarDNI(String buscar) {
DefaultTableModel modelo;
String[] titulos = {“ID”, “DNI”, “Nombres”, “Apellidos Paterno”, “Apellido Materno”, “Fecha Nacimiento”, “Sexo”, “id_seccion”, “Condicion”};
String[] registro = new String[9];

totalregistros = 0;
modelo = new DefaultTableModel(null, titulos);

sSQL = “select p.idpersona,p.dni_persona,p.nombres,p.ape_pat,p.ape_mat,p.fecha_nac,p.sexo,e.id_seccion,e.condicion ”
+ “from persona p inner join estudiante e ”
+ “on p.idpersona = e.idpersona where p.dni_persona like ‘%”
+ buscar + “%’ order by p.dni_persona asc”;

try {
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sSQL);

while (rs.next()) {
registro[0] = rs.getString(“idpersona”);
registro[1] = rs.getString(“dni_persona”);
registro[2] = rs.getString(“nombres”);
registro[3] = rs.getString(“ape_pat”);
registro[4] = rs.getString(“ape_mat”);
registro[5] = rs.getString(“fecha_nac”);
registro[6] = rs.getString(“sexo”);
registro[7] = rs.getString(“id_seccion”);
registro[8] = rs.getString(“condicion”);

totalregistros = totalregistros + 1;
modelo.addRow(registro);

}
rs.close();
st.close();
cn.close();
return modelo;
} catch (Exception e) {
JOptionPane.showConfirmDialog(null, e + ” error mostrar”);
return null;
}
}

public boolean insertar_estudiante(d_estudiante dts) {
sSQL = “insert into persona (dni_persona,nombres,ape_pat,ape_mat,fecha_nac,sexo)”
+ “values (?,?,?,?,?,?)”;
sSQL2 = “insert into estudiante (idpersona,id_seccion,condicion)”
+ “values ((select idpersona from persona order by idpersona desc limit 1),?,?)”;
try {
PreparedStatement pst = cn.prepareStatement(sSQL);
PreparedStatement pst2 = cn.prepareStatement(sSQL2);

pst.setString(1, dts.getDni());
pst.setString(2, dts.getNombres());
pst.setString(3, dts.getApe_pat());
pst.setString(4, dts.getApe_mat());
pst.setDate(5, dts.getFecha_nac());
pst.setString(6, dts.getSexo());

pst2.setInt(1, dts.getId_seccion());
pst2.setString(2, dts.getCondicion());

int n = pst.executeUpdate();

if (n != 0) {
int n2 = pst2.executeUpdate();

if (n2 != 0) {
return true;

} else {
return false;
}

} else {
return false;
}

} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
return false;
}
}

public boolean editar_estudiante(d_estudiante dts) {
sSQL = “update persona set dni_persona=?,nombres=?,ape_pat=?,ape_mat=?,fecha_nac=?,sexo=?”
+ ” where idpersona=?”;

sSQL2 = “update estudiante set id_seccion=?,condicion=?”
+ ” where idpersona=?”;
try {

PreparedStatement pst = cn.prepareStatement(sSQL);
PreparedStatement pst2 = cn.prepareStatement(sSQL2);

pst.setString(1, dts.getDni());
pst.setString(2, dts.getNombres());
pst.setString(3, dts.getApe_pat());
pst.setString(4, dts.getApe_mat());
pst.setDate(5, dts.getFecha_nac());
pst.setString(6, dts.getSexo());
pst.setInt(7, dts.getIdpersona());

pst2.setInt(1, dts.getId_seccion());
pst2.setString(2, dts.getCondicion());
pst2.setInt(3, dts.getIdpersona());

int n = pst.executeUpdate();

if (n != 0) {
int n2 = pst2.executeUpdate();

if (n2 != 0) {
return true;

} else {
return false;
}

} else {
return false;
}

} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
return false;
}
}

public DefaultTableModel mostrarEditar(int buscar) {
DefaultTableModel modelo;
String[] titulos = {“ID”, “DNI”, “Nombres”, “Apellidos Paterno”, “Apellido Materno”, “Fecha Nacimiento”, “Sexo”, “id_seccion”, “Condicion”};
String[] registro = new String[9];

totalregistros = 0;
modelo = new DefaultTableModel(null, titulos);

sSQL = “select p.idpersona,p.dni_persona,p.nombres,p.ape_pat,p.ape_mat,p.fecha_nac,p.sexo,e.id_seccion,e.condicion ”
+ “from persona p inner join estudiante e ”
+ “on p.idpersona = e.idpersona where p.idpersona =”+buscar;

try {
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sSQL);

while (rs.next()) {
registro[0] = rs.getString(“idpersona”);
registro[1] = rs.getString(“dni_persona”);
registro[2] = rs.getString(“nombres”);
registro[3] = rs.getString(“ape_pat”);
registro[4] = rs.getString(“ape_mat”);
registro[5] = rs.getString(“fecha_nac”);
registro[6] = rs.getString(“sexo”);
registro[7] = rs.getString(“id_seccion”);
registro[8] = rs.getString(“condicion”);

totalregistros = totalregistros + 1;
modelo.addRow(registro);

}
rs.close();
st.close();
cn.close();
return modelo;

} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e + ” error mostrar”);
return null;
}
}
}

El paquete de presentacion contendra 2 jFrame (formularios) llamados p_estudiante.java y p_estudiante2.java

img4

img5

y finalmente el codigo en cada jFarme

p_estudiante.java

package com.colegio.presentacion;
import com.colegio.datos.d_accion;
import com.colegio.logica.l_estado;
import com.colegio.logica.l_estudiante;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class p_estudiante extends javax.swing.JFrame {

public int id;

public p_estudiante() {
initComponents();
mostrar(“”);

}

void mostrar(String buscar) {
try {
DefaultTableModel modelo;
l_estudiante tabla = new l_estudiante();
modelo = tabla.mostrar(buscar);

this.jTableEstudiante.setModel(modelo);
ocultar_columnas();
this.jLabelNroRegistros.setText(“Total Registros ” + Integer.toString(tabla.totalregistros));

} catch (Exception e) {
JOptionPane.showConfirmDialog(rootPane, e);
}
}
void BuscarDNI(String buscar) {
try {
DefaultTableModel modelo;
l_estudiante tabla = new l_estudiante();
modelo = tabla.BuscarDNI(buscar);

this.jTableEstudiante.setModel(modelo);
ocultar_columnas();
this.jLabelNroRegistros.setText(“Total Registros ” + Integer.toString(tabla.totalregistros));

} catch (Exception e) {
JOptionPane.showConfirmDialog(rootPane, e);
}
}
void ocultar_columnas(){
jTableEstudiante.getColumnModel().getColumn(7).setMaxWidth(0);
jTableEstudiante.getColumnModel().getColumn(7).setMinWidth(0);
jTableEstudiante.getColumnModel().getColumn(7).setPreferredWidth(0);
}

void getEstudiante2() throws SQLException{
this.setVisible(false);
p_estudiante2 pst2 = new p_estudiante2();
Toolkit mipantalla=Toolkit.getDefaultToolkit();
Dimension dimension=mipantalla.getScreenSize();
Dimension ventana = pst2.getSize();
pst2.setLocation((dimension.width-ventana.width)/2, (dimension.height-ventana.height)/2);
pst2.setVisible(true);
}
void estadoAgregar() throws SQLException{
d_accion dts = new d_accion();
l_estado func = new l_estado();
dts.setEstado(“agregar”);
if (func.agregar_estado(dts)) {
JOptionPane.showMessageDialog(null, “Accion Agregar”);
}
}
void estadoEditar() throws SQLException{
d_accion dts = new d_accion();
l_estado func = new l_estado();
dts.setEstado(“editar”);
dts.setCodigo(id);

if (func.editar_estado(dts)) {
JOptionPane.showMessageDialog(null, “Accion Editar”);
}
}

private void jButtonNuevoActionPerformed(java.awt.event.ActionEvent evt) {
try {
estadoAgregar();
getEstudiante2();
} catch (SQLException ex) {

}

}

private void jButtonEditarActionPerformed(java.awt.event.ActionEvent evt) {
if (this.jTableEstudiante.getSelectedRow()==-1) {
JOptionPane.showMessageDialog(null, “No hay ningun registro seleccionado”);
}else{
try {
estadoEditar();
getEstudiante2();
} catch (SQLException ex) {

}

}
}

private void jButtonSalirActionPerformed(java.awt.event.ActionEvent evt) {
this.dispose();
}

private void jTableEstudianteMouseClicked(java.awt.event.MouseEvent evt) {
int fila = jTableEstudiante.rowAtPoint(evt.getPoint());
id=Integer.parseInt(jTableEstudiante.getValueAt(fila, 0).toString());
}

private void jButtonBuscarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if (this.jRadioButtonApellido.isSelected()) {
mostrar(this.jTextFieldBuscar.getText());
}else if(this.jRadioButtonDni.isSelected()){
BuscarDNI(this.jTextFieldBuscar.getText());
}
}

p_estudiante2.java

package com.colegio.presentacion;

import com.colegio.datos.d_estudiante;
import com.colegio.logica.l_estado;
import com.colegio.logica.l_estudiante;
import com.colegio.logica.l_seccion;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.Date;
import java.sql.SQLException;
import java.util.Calendar;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class p_estudiante2 extends javax.swing.JFrame {

public int id;
public String accion=”agregar”;

public p_estudiante2() throws SQLException {
initComponents();
this.jTextFieldIdPersona.setVisible(false);
secciones();
if ((estado().equals(“editar”))) {
datosEstudiante();
accion=”editar”;
}

}

void datosEstudiante() {
try {
l_estado a = new l_estado();
id=a.mostrarCodigo();

DefaultTableModel modelo;
l_estudiante tabla = new l_estudiante();
modelo = tabla.mostrarEditar(id);
this.jTableEstudiante.setModel(modelo);
this.jTextFieldIdPersona.setText(jTableEstudiante.getValueAt(0, 0).toString());
this.jTextFieldDni.setText(jTableEstudiante.getValueAt(0, 1).toString());
this.jTextFieldNombre.setText(jTableEstudiante.getValueAt(0, 2).toString());
this.jTextFieldApePat.setText(jTableEstudiante.getValueAt(0, 3).toString());
this.jTextFieldApeMat.setText(jTableEstudiante.getValueAt(0, 4).toString());
this.jCalendarFecNac.setDate(Date.valueOf(jTableEstudiante.getValueAt(0, 5).toString()));
this.jComboBoxSexo.setSelectedItem(jTableEstudiante.getValueAt(0, 6).toString());
this.jComboBoxCondicion.setSelectedItem(jTableEstudiante.getValueAt(0, 8).toString());
this.jDataComboSeccion.setSelectedIndex(Integer.parseInt(jTableEstudiante.getValueAt(0, 7).toString()));

} catch (Exception e) {
JOptionPane.showMessageDialog(null, “Error al mostrar datos estudiante “+e);
}
}

void secciones(){
try {

l_seccion sec=new l_seccion();
DefaultTableModel tbCombo;
tbCombo= sec.mostrarSeccion();
this.jDataComboSeccion.setValueMember(“id”);
this.jDataComboSeccion.setDisplayMember(“descripcion”);
this.jDataComboSeccion.setTableModelSource(tbCombo);
this.jDataComboSeccion.setPermitirBlanco(false);

} catch (Exception e) {
JOptionPane.showConfirmDialog(rootPane, e);
}
}

void getEstudiante() {
this.setVisible(false);
p_estudiante pst = new p_estudiante();
Toolkit mipantalla=Toolkit.getDefaultToolkit();
Dimension dimension=mipantalla.getScreenSize();
Dimension ventana = pst.getSize();
pst.setLocation((dimension.width-ventana.width)/2, (dimension.height-ventana.height)/2);
pst.setVisible(true);
}

void validar() {
if (jTextFieldDni.getText().length() == 0) {
JOptionPane.showMessageDialog(null, “Debes ingresar un número de DNI”);
jTextFieldDni.requestFocus();
return;
}
if (jTextFieldNombre.getText().length() == 0) {
JOptionPane.showMessageDialog(null, “Debes ingresar un nombre”);
jTextFieldNombre.requestFocus();
return;
}
if (jTextFieldApePat.getText().length() == 0) {
JOptionPane.showMessageDialog(null, “Debes ingresar un apellido paterno”);
jTextFieldApePat.requestFocus();
return;
}
if (jTextFieldApeMat.getText().length() == 0) {
JOptionPane.showMessageDialog(null, “Debes ingresar un apellido materno”);
jTextFieldApeMat.requestFocus();
return;
}

}

public String estado() throws SQLException {
l_estado ae = new l_estado();
String estado = ae.mostrarEstado();
return estado;
}

private void jButtonGuardarActionPerformed(java.awt.event.ActionEvent evt) {
try {
validar();
l_estudiante func = new l_estudiante();
d_estudiante dts = new d_estudiante();

dts.setDni(this.jTextFieldDni.getText());
dts.setNombres(this.jTextFieldNombre.getText());
dts.setApe_pat(this.jTextFieldApePat.getText());
dts.setApe_mat(this.jTextFieldApeMat.getText());

Calendar cal;
int d, m, a;
cal = jCalendarFecNac.getCalendar();
d = cal.get(Calendar.DAY_OF_MONTH);
m = cal.get(Calendar.MONTH);
a = cal.get(Calendar.YEAR) – 1900;
dts.setFecha_nac(new Date(a, m, d));

int sexo = jComboBoxSexo.getSelectedIndex();
dts.setSexo((String) jComboBoxSexo.getItemAt(sexo));
int condicion = jComboBoxCondicion.getSelectedIndex();
dts.setCondicion((String) jComboBoxCondicion.getItemAt(condicion));
dts.setId_seccion(this.jDataComboSeccion.getSelectedIndex());

if (accion.equals(“agregar”)) {
if (func.insertar_estudiante(dts)) {
JOptionPane.showMessageDialog(null, “el estudiante fue registrado satisfactoriamente”);

}
} else if (accion.equals(“editar”)) {
dts.setIdpersona(Integer.parseInt(this.jTextFieldIdPersona.getText()));
if (func.editar_estudiante(dts)) {
JOptionPane.showMessageDialog(null, “el estudiante fue actualizado satisfactoriamente”);

}

}

getEstudiante();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, “Error al guardar los datos “+e);
}
}

private void jButtonVolverActionPerformed(java.awt.event.ActionEvent evt) {
getEstudiante();
}

 

Anuncios

One thought on “CRUD con Java en capas

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s