Ahora aqui dejo para su analisis un mini proyecto sobre una base de datos
"PRESTAMOS" que consiste en llevar un control de los equipos prestados en una empresa constructora.
El modelo de datos Semantico es el siguiente:
y su equivalente en MER (Modelo Entidad Relacion)
La aplicacion para su conexion a la base de datos MYSQL, hace uso de la clase "
conectate.java" y de la libreria mysql-connector-java-5.0.7-bin, ademas para el control de la interfaz con la base de datos, se crea la clase "sqlclass.java" que consiste en varios metodos para INSERTAR, ELIMINAR, ACTUALIZAR registros de la base de datos.
Esta clase es utilizada por la interfaz para manipular los registros de cada una de las tablas, como se ve en la imagen de arriba para la tabla Herramientas, donde se insertan los datos obtenidos de la base de datos en un objeto JTable, asi mismo esta clase tiene los metodos InsertarRegistro, DeleteRegistro, UpdateRegistro, que se implementan en la interfaz mediante una llamada:
String datos[] = {CodHer,descripcion,tipo,precio};
herramienta.InsertarRegistro(datos, "insert into herramienta values(?,?,?,?)");
donde el parametro
datos es un objeto de tipa array que contiene la informacion a insertar en la base de datos y el parametro
sql, que contiene la instruccion en sql para realizar la accion.
Igualmente para el metodo UpdateRegistro, se pasan los parametros datos(array de datos) y la instruccion sql
herramienta.UpdateRegistro(datos, "update Herramienta set descripcion=?, tipo=?, precio=? where CodHer=?");
finalmente la sintaxis para el uso del metodo eliminarRegistro, es:
herramienta.DeleteRegistro("herramienta", "CodHer", codigo);
donde se pasa como parametros, el nombre de la tabla en la cual se eliminaran registros, el nombre de la columna que contiene la llave primaria y el codigo (ID) de la fila del registro a eliminar
La clase "
sqlclass.java" en su totalidad:
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class sqlclass {
conectate con;
public sqlclass (){
con = new conectate();
}
/* INSERTRA UN NUEVO REGISTRO EN LA BASE DE DATOS
* PARAMETROS(Un array de String con los datos a insertar,la instruccion sql)*/
public void InsertarRegistro(String datos[], String sql){
try {
PreparedStatement pstm = con.getConnection().prepareStatement(sql);
for(int i=0; i<=datos.length-1;i++){
}
pstm.execute();
pstm.close();
}catch(SQLException e){
System.out.println(e);
}
}
/* BORRA UN REGISTRO DE LA BASE DE DATOS
* parametros (Nombre de la tabla, nombre columna, Codigo unico)*/
public void DeleteRegistro(String tabla, String col, String id){
try {
PreparedStatement pstm = con.getConnection().prepareStatement("delete from " + tabla + " where " + col + " = ?");
pstm.setString(1, id);
pstm.execute();
pstm.close();
}catch(SQLException e){
System.out.println(e);
}
}
/* ACTUALIZA UNA TABLA DE LA BASE DE DATOS
* parametros (Un Array de string con los datos a actualizar, la instruccion sql )*/
public void UpdateRegistro(String datos[], String sql){
try {
PreparedStatement pstm = con.getConnection().prepareStatement(sql);
for(int i=0; i<=datos.length-1;i++){
pstm.setString(i+1, datos[i]);
}
pstm.execute();
pstm.close();
}catch(SQLException e){
System.out.println(e);
}
}
/* METODO PARA OBTENER TODOS LOS DATOS DE UNA TABLA
* parametros (Un array con los nombres de las columnas, el nombre de la tabla, la instruccion sql) */
public Object [][] GetTabla(String colName[], String tabla, String sql){
int registros = 0;
//obtenemos la cantidad de registros existentes en la tabla
try{
PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count(1) as total FROM " + tabla);
ResultSet res = pstm.executeQuery();
res.next();
registros = res.getInt("total");
res.close();
}catch(SQLException e){
System.out.println(e);
}
Object[][] data = new String[registros][colName.length];
String col[] = new String[colName.length];
//realizamos la consulta sql y llenamos los datos en "Object"
try{
PreparedStatement pstm = con.getConnection().prepareStatement(sql);
ResultSet res = pstm.executeQuery();
int i = 0;
while(res.next()){
for(int j=0; j<=colName.length-1;j++){
col[j] = res.getString(colName[j]);
data[i][j] = col[j];
}
i++;
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}
/* METODO PARA TODOS LOS DATOS DE UNA COLUMNA
* parametros (Nombre de la tabla, nombre columna, instruccion sql ) */
public Object [] GetColumna(String tabla, String colName, String sql){
int registros = 0;
//obtenemos la cantidad de registros existentes en la tabla
try{
PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count(1) as total FROM " + tabla);
ResultSet res = pstm.executeQuery();
res.next();
registros = res.getInt("total");
res.close();
}catch(SQLException e){
System.out.println(e);
}
Object[] data = new String[registros];
try{
PreparedStatement pstm = con.getConnection().prepareStatement(sql);
ResultSet res = pstm.executeQuery();
int i = 0;
while(res.next()){
data[i] = res.getString(colName);
i++;
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}
/* METODO PARA OBTENER UN DATO DE UNA TABLA
PARAMETROS (nombre columna, instruccion sql) */
public String GetData(String colName, String sql){
String data = new String();
try{
PreparedStatement pstm = con.getConnection().prepareStatement(sql);
ResultSet res = pstm.executeQuery();
while(res.next()){
data = res.getString(colName);
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}
} //fin clase
la clase contiene ademas el metodo
getTabla(), que obtiene todos los datos de una tabla de la base de datos y los coloca en un objeto Object[][] para utilizarlo mas facilmente en la interfaz, por ejemplo:
private void updateTabla(){
String[] columNames = {"Codigo","Descripcion","Tipo","Precio"};
String colName[] = {"CodHer","descripcion","tipo","precio"};
//nombre de columnas, tabla, instruccion sql
dtHer = herramienta.GetTabla(colName, "herramienta", "select * from herramienta order by CodHer");
// se colocan los datos en la tabla
DefaultTableModel datos = new DefaultTableModel(dtHer,columNames);
tabla.setModel(datos);
}
Se crea un array colName[] y se lo llena con los nombres de las columnas de la BD, y se lo pasa como parametro al metodo GetTabla, al que ademas se especifica, el "nombre de la Tabla" y la instruccion SQL para realizar la obtencion de datos.
El proyecto tambien hace uso del tipo de formularios
MDI (multiple document interface) y de la libreria
Substance para aplicar un skin a la interfaz
Vista general del proyecto
[Enlace de descarga actualizado 27-03-2011]
El proyecto para descargar