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)
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
31 comentarios:
Muy buena la página. Me he descargado los archivos necesarios para probar el proyecto, pero en el momento de introducir los datos en las tablas me da error. Las tablas las importo y se crean perfectamente, pero los datos al tratar de insertarlos a través de la ventana SQL de phpMyAdmin me da error. Por más que miro no encuentro error alguno en el archivo "departamento" que es el primero que estoy tratando de insertar. ¿Alguna solución?.
Antes de ejecutar el SQL en el phpMyAdmin, debes quitar las comillas (backquotes en ingles) a los nombres de los campos, asi:
INSERT INTO departamento (CodDep, Nombre, Fono, Jefe) VALUES
('DEP-TEMP01', 'Sala oscura', '64-29695', 'Aquiles Grito'),
('DEP-TEMP02', 'Cocina', '64-23776', 'Mirando Cosas');
Antes de crear los archivos sql, me olvide quitar la opcion de - Usar "backquotes" con tablas y nombres de campo - es por eso que en el rar los archivos tienen esas molestosas comillas, un error mio
Caramba, es verdad, que tontería; por más que miraba no veía el error, tienes toda la razón. Bueno voy a probar todo el código y a ir viendo poco a poco el resto de código de la página. Muchas gracias.
hola el proyecto seve bien sabes pero no podrias de porfavor subirlo a otro servidor como medifire porque ese en que esta nome deja bajarlo si no es mucho pedir..
buen aporte a los q estamos aprendiendo a trabajar con netbeans yo estoy haciendo el enlace con postgreSQL y me jala bien solo q la tabla seccion y prestamos no actualiza voy a ver como puedo hacer jalar de nuevo gracias
Muchas Gracias por el ejemplo ya lo hice jalar bien utilizando PostgreSQL de nuevo gracias si vos no somos nada
hola esta bien el proyecto,pero tengo una duda o talves me equivoque pero si tenemos la tabla prestamos y la de herramienta que es de alli donde se van a tomar las herramientar a prestar creo que en la tabla herramienta deberia ir rebajando la cantidad de harramientas prestada para asi saber cuantas hay en disposicion talvez puedes responderme esta duda esque yo ise un proyecto casi igual solo que era de rentar de videojuegos y en el producto rebajaba la cantida que tenia en disposicion eso es todo....
si y no, me explico, en el caso de un videoclub donde un video puede tener "muchas copias" y por tanto se necesita un control mas detallado de entradas y salidas SI se puede utilizar la forma que dices dependiendo de la estructura de tu base de datos (OJO), pero tambien NO, osea la cantidad de videos prestados puede saberse realizando una consulta a la BD y asi no tener que utilizar todo un campo en la tabla "videos" por ejemplo.
En el caso de "prestamo de maquinarias" una herramienta "es única", osea no puede exisitir un tractor con el mismo número de "placa" por poner un ejemplo, asi que no es necesario ese campo que dices.
todos los caminos conducen a roma :), pero hay unos mas largos y otros mas cortos
Hola gracias por responder ami duda tienes razon sabes tus totoriales mean ayudado mucho ya que yo estoy estudiando una lic. informatica y estoy empesando en esto de la programacion de java con netbeans. te agradesco que compartas tu proyectos ya que estoy seguro de que nos has ayudado a muchos si que adelante estare pendiente de tus totoriales
primero que todo te agradezco por todo lo que haces.
sabes tengo un problema y la verdad no se que hacer, intale mysql y cree las tablas, le agregue todo al proyecto, pero al ejecutar y dar click en "departamentos o herramientas", bueno en cualquiera no me muestra nada, ni siquiera error y si le doy click de nuevo me dice que la ventana ya esta abierta, si me puedes ayodar porfavor.
Muchas Gracias.
supongo a que te refieres a que el formulario hijo DEPARTAMENTO O HERRAMIENTA, no se ve, fijate que la etiqueta SHOW() este presente cuando llames los formularios, porque si te muestra el mensaje, quiere decir que el objeto se creo pero no te lo esta mostrando
todo arreglado y funcionando al 100%, te pasaste muchas gracias!!
Hola soy nuevo en esto de los codigos java desearia revisar la estructura de tus codigos pero desde el server en el q esta su archivo no me permite desacargar le agradeceria mucho si podria subirlo en otro server o si seria tan amable de enviar a mi correo attila46_1@hotmail.com.
De ante mano gracias y muy iteresantes sus codigos
Uff necesito este proyecto pero no puedo descargarlo el link ya murio.. Si pueden mandarme el mismo se los agradeceria! o arreglar el link. me lo envian: marbrice02@gmail.com
Por favor ¿podrían subir el archivo de nuevo? el enlace está roto.
Gracias y buen trabajo!!
Me gustaría aprender del código de este proyecto si alguien pudiera mandarmelo a mi correo porque el link esta roto...
ulikeme88@hotmail.com
saludos ^^
enlace actualizado
hola, un favor. podrias de cirme donde pongo las librerias para que me funcione tu JAR?
projdbprestamo2\PROYECTO NETBEANS\prestamos\dist
alli esta en jar: prestamo.jary
y en una carpeta lib estan dis ibrerias, una de mysql y otra de substance, donde las pongo o copio para que el jar de PRESTAMO me funcione?
pòrque lo abro, pero cuando le doy algun boton, no abre ninguna ventana, y cuando le vuelvo a dar click me dice que la ventana ya esta abierta.
lee las instrucciones que estan dentro del RAR, el jar no te va a funcionar en tu pc porque necesitas cambiar desde netbeans el Root, Password de tu base de datos, ademas tienes que crear una base de datos "dbprestamo", tienes que tener instalado y configurado las librerias mysql-connector y substance, todo eso esta desglosado a detalle en el blog. suerte
ok hare eso, creo que mejor me meto al codigo y a ve que pasa.
muchas gracias.
Hola jc-mouse.
En primer lugar felicitarte por tan buenos post en serio de agradecer el que compartas tanto de tus conocimientos.
Seguidamente quisiera pedirte un favor cuando te compartes un tuto de gestión de usuarios, con roles y bitacora para la base de datos.
Saludos
hola mi hermano yo tambien soy bolivia y me siento orgulloso de saber que hay gente que le pone ganas al estudio y quiere salir adelante con todas estas aplicaciones me doy cuenta que te interesa mucho la programacion en java estamos iguales quiero agradecerte por los los tutoriales y las aplicaciones que permanentemente estas publicando pero un consejo amigo utiliza algo como megaupload o rapishare para subir tus archivos esto de frakshare es pesimo no eh podido descargar algunas aplicaciones por que me da un erro saludos gracias espero lo arregles para que pueda aprende algo de tus aplicaciones gracias
InvestigacionOperaciones:
Gracias, por el momento estoy ocupado pero proximanente estare subiendo nuevos proyectos, la mayoria ya los tengo hechos pero como sabran algunos, cuesta tiempo y esfuerzo hacer un post, subir archivos, y demas
Reycito:
gracias hermano, ya visité tu blog esta buenisimo
Felicidades muy bueno tu programa me ayudara a realizar el mio...gracias! :)
mouse gracias por tu gran aporte de ls tutoriales y proyectossoy tu segidor ^^, buenoe stoy haciendo este proyecto ya lo arme todo y todo perfecto, pero en netbeans no me corre, nose por ke y en jar k creastes solo se abre el ayuda, pero no los demas cuadros, ayudame este proyecto ya lo boy realizando 1 semana y mañana tengo k presentar este u.u ayudame porfa gracias
excelente codigo !!!!
no saves cuanto me ayudo !!!!
muchisismas gracias amigo mouse por la manera tan inmensa y humilde de compartir Dios te siga ayudando
Gracias, me parece interesante
no lo puede descargar
Publicar un comentario