Ing. Honoria Reyes Macedo
INTRODUCCION: En esta práctica se usa el
manejo de OBJETOS para llenar un ArrayList que
utilizara el jTable.
La realación que existe entre la tabla
materia y califica es de uno a varios. Ya que por cada materia existiran varias
calificaciones. Para resolver esta situación se crea la clase MateriaVo con un
ArrayList que se llena con cada objeto de la table CalificaVo.(Ver anexo II)
Para llevar a cabo esta practica
a) Es necesario tener las dos clases creadas en la
practica anterior 004 :
MateriaVo.java y CalificaVo.java
Crear un JFrame Form “ConsultaCalificaFrm.java” con
los componentes:
Las librerias:
import images.ImagenPanel;
import javax.swing.ImageIcon;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
los controles:
Las librerias:
import images.ImagenPanel;
import javax.swing.ImageIcon;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
los controles:
jBtnSalir
jTblMate_Calif (Nombre de un JTable)
Nota: Observar que el constructor
de MateriaDAO y CalificaDAO obtiene la conexión a la
base de datos al ejecutar el método getConexion()
Ejemplo
public class CalificaDAO
JDBConexion ObjConecta = new JDBConexion();
JDBConexion ObjConecta = new JDBConexion();
Connection
miConexion=null; // Canal de conexion
ResultSet
miTabla=null; //Guarda informaci�n de las columnas(campos)
Statement
miInstruccion=null; //Ejecuta
sentencias SQL sin par�metros
PreparedStatement miInstruccionPrep=null; /
int miResultado;
public
CalificaDAO() {
try{
miConexion=ObjConecta.getConexion();
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"No se conecto a la Base de
Datos: "
+ ex.getMessage(),"ERROR DE CONEXION",
JOptionPane.ERROR_MESSAGE);
+ ex.getMessage(),"ERROR DE CONEXION",
JOptionPane.ERROR_MESSAGE);
}
}
2) Agregar una variable arreglo en la clase MateriaVo.java
private ArrayList<CalificaVo> calificaciones = new ArrayList<CalificaVo>();
Agregar su GET y su SET
public void setCalificaciones(CalificaVo cal){ this.calificaciones.add(cal); }
public ArrayList<CalificaVo> getCalificaciones(){ return calificaciones; }
private ArrayList<CalificaVo> calificaciones = new ArrayList<CalificaVo>();
Agregar su GET y su SET
public void setCalificaciones(CalificaVo cal){ this.calificaciones.add(cal); }
public ArrayList<CalificaVo> getCalificaciones(){ return calificaciones; }
3) Llenar la
tabla que muestra las calificaciones:
- Hacer una consulta con
las dos tablas: Materia y califica y guardar los resultados en un arrayList
para llenar la tabla
Cada fila del ArrayList sera un objeto
de materia(Recuerda que por cada materia hay tres calificaciones)
SOLUCION: En la clase ConsultaCalificaFrm.java
a) Declarar un modelo para la tabla
DefaultTableModel dtm = new DefaultTableModel();
CalificaDAO ObjMat= new CalificaDAO();
b) En la propiedad model de la tabla "jTblMate_Calif", agregar: dtm (Para NetBenas)
El programa automaticamente asignara:
jTblMate_Calif.setModel(dtm); (Agregar manualmente si no es en NetBeans)
3.1)
El Llenado de un ArrayList
en la clase CalificaDAO.java:
Agregar la librería ArrayList
Nota: Se muestran dos posibles soluciones
para el llenado del ArrayList
SOLUCION1:
public
ArrayList<MateriaVo> ConsultaMateCalif(){
int mateUno;
ResultSet miTabla2=null;
MateriaVo mate;
CalificaVo cali;
ArrayList<MateriaVo> ArrayMate = new ArrayList<MateriaVo>();
try{
String BuscaMate ="select
ca.cvepersona, ma.clavemate, ma.nombremateria,ca.clavecalifica, "
+ "
ca.descripcion,ca.calificacion,ca.fechacalif, ca.status from materia ma,"
+ " califica ca where
ca.clavemate=ma.clavemate and ca.status=1 "
+ " order by ca.cvepersona,
ma.clavemate";
miInstruccionPrep=miConexion.prepareStatement(BuscaMate);
miTabla=miInstruccionPrep.executeQuery();
mateUno=0;
mate=new MateriaVo();
while(miTabla.next()){
if (mateUno!=0 &&
(mateUno!=miTabla.getInt(2))){
ArrayMate.add(mate);
mate=new MateriaVo();
}
if (mateUno!=miTabla.getInt(2)){
mate.setClavemate(miTabla.getInt(2));
mate.setNombremateria(miTabla.getString(3));
}
cali=new CalificaVo();
cali.setCvePersona(miTabla.getInt(1));
cali.setClaveCalifica(miTabla.getInt(4));
cali.setDescripcion(miTabla.getString(5));
cali.setCalificacion(miTabla.getDouble(6));
cali.setFecha_Calif(miTabla.getString(7));
cali.setStatus(miTabla.getInt(8));
mate.setCalificaciones(cali);
mateUno= miTabla.getInt(2);
}
ArrayMate.add(mate);
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"ERROR: " +
ex.getMessage(),"ERROR DE BUSQUEDA",JOptionPane.ERROR_MESSAGE);
}
return ArrayMate;
}
***************** **********************
SOLUCION2:
public ArrayList<MateriaVo>
ConsMateCalif(){
ResultSet miTabla2=null;
MateriaVo mate;
CalificaVo cali;
ArrayList<MateriaVo> ArrayMate = new ArrayList<MateriaVo>();
try{
String BuscaMate ="select
distinct(clavemate),nombremateria, status
from materia";
miInstruccionPrep=miConexion.prepareStatement(BuscaMate);
miTabla=miInstruccionPrep.executeQuery();
while(miTabla.next()){
mate=new MateriaVo();
mate.setClaveMate(miTabla.getInt(1));
mate.setNombreMateria(miTabla.getString(2));
mate.setStatus(Boolean.parseBoolean(String.valueOf(miTabla.getInt(3))));
String BuscaCali= "select clavecalifica,
descripcion, calificacion, fecha_calif,status from califica where
clavemate=" + mate.getClaveMate();
miInstruccionPrep=miConexion.prepareStatement(BuscaCali);
miTabla2=miInstruccionPrep.executeQuery();
while(miTabla2.next()){
cali=new CalificaVo();
cali.setClaveCalifica(miTabla2.getInt(1));
cali.setDescripcion(miTabla2.getString(2));
cali.setCalificacion(miTabla2.getDouble(3));
cali.setFecha_Calif(miTabla2.getString(4));
cali.setStatus(miTabla2.getInt(5));
mate.setCalificaciones(cali);
}
ArrayMate.add(mate);
}
}catch(SQLException ex){
JOptionPane.showMessageDialog(null,"ERROR: " +
ex.getMessage(),"ERROR DE BUSQUEDA2",JOptionPane.ERROR_MESSAGE);
}
return ArrayMate;
}
**************** ************
3.2) En la clase de
la interfaz “ConsultaCalificaFrm.java” crear un metodo para llenar el jTable. Utilizar el ArrayList creado en el
paso 1: (Se utiliza tambien el metodo TitulosModelo() para poner encabezados )
public void TitulosModelo(){
//Agregar Titulos
dtm.addColumn("CvePersona");
dtm.addColumn("CveMateria");
dtm.addColumn("Materia");
dtm.addColumn("CveCalifica");
dtm.addColumn("Descripción");
dtm.addColumn("Calificación");
dtm.addColumn("Fecha");
}
public void llenaCalificaciones(){
int CalificaTamanio;
Object[] arrayCal = new Object[7];
ArrayList<MateriaVo> ListMateria= ObjMat.ConsultaMateCalif();
TitulosModelo();
CalificaTamanio=ListMateria.size();
int x=0;
//Recorre primero las materias
for(MateriaVo Obj:ListMateria){
ArrayList<CalificaVo> misCalif= Obj.getCalificaciones();
for(CalificaVo Ob:misCalif){
x=0;
arrayCal[x]=Ob.getCvePersona();
x+=1;
arrayCal[x]=Obj.getClavemate();
x+=1;
arrayCal[x]=Obj.getNombremateria();
x+=1;
arrayCal[x]=Ob.getClaveCalifica();
x+=1;
arrayCal[x]=Ob.getDescripcion();
x+=1;
arrayCal[x]=Ob.getCalificacion();
x+=1;
arrayCal[x]=Ob.getFecha_Calif();
dtm.addRow(arrayCal);
}
}
}
//Agregar Titulos
dtm.addColumn("CvePersona");
dtm.addColumn("CveMateria");
dtm.addColumn("Materia");
dtm.addColumn("CveCalifica");
dtm.addColumn("Descripción");
dtm.addColumn("Calificación");
dtm.addColumn("Fecha");
}
public void llenaCalificaciones(){
int CalificaTamanio;
Object[] arrayCal = new Object[7];
ArrayList<MateriaVo> ListMateria= ObjMat.ConsultaMateCalif();
TitulosModelo();
CalificaTamanio=ListMateria.size();
int x=0;
//Recorre primero las materias
for(MateriaVo Obj:ListMateria){
ArrayList<CalificaVo> misCalif= Obj.getCalificaciones();
for(CalificaVo Ob:misCalif){
x=0;
arrayCal[x]=Ob.getCvePersona();
x+=1;
arrayCal[x]=Obj.getClavemate();
x+=1;
arrayCal[x]=Obj.getNombremateria();
x+=1;
arrayCal[x]=Ob.getClaveCalifica();
x+=1;
arrayCal[x]=Ob.getDescripcion();
x+=1;
arrayCal[x]=Ob.getCalificacion();
x+=1;
arrayCal[x]=Ob.getFecha_Calif();
dtm.addRow(arrayCal);
}
}
}
3) Ejecutar el
metodo llenaCalificaciones() desde el constructor de la clase ConsultaCalificaFrm.java
Compilar y Ejecutar
4) Agregar un evento "MouseClicked" a la Tabla jTblMate_Calif de la clase ConsultaCalificaFrm.java
4.1 Agregar una etiqueta al formulario
private javax.swing.JLabel jlSeleccion;
jlSeleccion = new javax.swing.JLabel();
jlSeleccion.setText("INFORMACION");
jp.add(jlSeleccion);
jlSeleccion.setBounds(60, 20, 680, 30);
4.2 Crear la clase anonima de jTblMate_Calif dentro del metodo initComponents()
Compilar y Ejecutar
4) Agregar un evento "MouseClicked" a la Tabla jTblMate_Calif de la clase ConsultaCalificaFrm.java
4.1 Agregar una etiqueta al formulario
private javax.swing.JLabel jlSeleccion;
jlSeleccion = new javax.swing.JLabel();
jlSeleccion.setText("INFORMACION");
jp.add(jlSeleccion);
jlSeleccion.setBounds(60, 20, 680, 30);
4.2 Crear la clase anonima de jTblMate_Calif dentro del metodo initComponents()
jTblMate_Calif.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jTblMate_CalifMouseClicked(evt);
}
});
4.3 Agregar el metodo que se ejecuta desde la clase anonima
private void jTblMate_CalifMouseClicked(java.awt.event.MouseEvent evt) {
DefaultTableModel modelotabla=(DefaultTableModel) jTblMate_Calif.getModel();
int filaselec= this.jTblMate_Calif.getSelectedRow();
String Datos=(String)(modelotabla.getValueAt(filaselec, 0)+ " "+ modelotabla.getValueAt(filaselec, 1)+" "+ modelotabla.getValueAt(filaselec, 4));
jlSeleccion.setText(Datos);
}
Compilar y Ejecutar
**********************************************************************
**************************** ANEXO I********************************
CONECTAR MOTORES DE BASES DE DATOS AL PROYECTO
Para conectarse a MySql, SQLServer u Oracle :
import javax.swing.*;
import java.sql.*;
public class Conexion {
private Connection con = null;
public Connection getConexion() throws SQLException{
// **********Conexion a Oracle **************
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.7.127:1521:oracledb"; //oracledb es mi base de datos
String user = "progvisual";
String password="TICuarto";
try{
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
}catch(ClassNotFoundException ex){
JOptionPane.showMessageDialog(null,"No se encontro el driver jdbc instalado en el sistema!\n\n"+ex.getMessage(),"Error de conexion",JOptionPane.ERROR_MESSAGE); }
return con;
}
}
**********************************************************************
**************************** ANEXO II *******************************
CLASES DE LAS ENTIDADES Vo(Value Object)
public void mouseClicked(java.awt.event.MouseEvent evt) {
jTblMate_CalifMouseClicked(evt);
}
});
4.3 Agregar el metodo que se ejecuta desde la clase anonima
private void jTblMate_CalifMouseClicked(java.awt.event.MouseEvent evt) {
DefaultTableModel modelotabla=(DefaultTableModel) jTblMate_Calif.getModel();
int filaselec= this.jTblMate_Calif.getSelectedRow();
String Datos=(String)(modelotabla.getValueAt(filaselec, 0)+ " "+ modelotabla.getValueAt(filaselec, 1)+" "+ modelotabla.getValueAt(filaselec, 4));
jlSeleccion.setText(Datos);
}
Compilar y Ejecutar
**********************************************************************
**************************** ANEXO I********************************
CONECTAR MOTORES DE BASES DE DATOS AL PROYECTO
Para conectarse a MySql, SQLServer u Oracle :
I) CONECTAR A Mysql
1.1 Bajar y el driver mysql-connector-java-5.3.38-bin.jar y configurarlo en NetBeans
Crear
la carpeta lib dentro del proyecto y pegar el archivo
1.2 Agregar el archivo a las librerías
del proyecto desde Project Settings
- Presionar
New + Add Archive + <Enter>
- Seleccionar
el archivo que se guardo en la carpeta lib
+ <Open>
- Ponerle
un nombre: MySql Connector + <OK>
-
Escoger el driver +
<OK>
Agregar la ruta del Driver en el
ClassPath de windows
1.3 En el archivo de Conexion.java verificar
import javax.swing.*;
import java.sql.*;
public class Conexion {
private Connection con = null;
public Connection getConexion() throws SQLException{
// **********Conexion a MySQL **************
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/calificaciones";
String user = "root";
String password="Mysql";
try{
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
}catch(ClassNotFoundException ex){
JOptionPane.showMessageDialog(null,"No se encontro el driver jdbc instalado en el sistema!\n\n"+ex.getMessage(),"Error de conexion",JOptionPane.ERROR_MESSAGE); }
return con;
}
}
1.3 En el archivo de Conexion.java verificar
import javax.swing.*;
import java.sql.*;
public class Conexion {
private Connection con = null;
public Connection getConexion() throws SQLException{
// **********Conexion a MySQL **************
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/calificaciones";
String user = "root";
String password="Mysql";
try{
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
}catch(ClassNotFoundException ex){
JOptionPane.showMessageDialog(null,"No se encontro el driver jdbc instalado en el sistema!\n\n"+ex.getMessage(),"Error de conexion",JOptionPane.ERROR_MESSAGE); }
return con;
}
}
II) CONECTAR A SqlServer
2.1.- Bajar el driver
sqljdbc.jar y configurarlo en NetBeans
-
En las librerias del proyecto en NetBeans: Libraries + Add JAR/Folder
- En databases + Driver + new Driver + Add + Buscar el driver
Para
probar : usar la coneccion en el mismo
driver
·
El host lo encuentras desde
la ventana command con hostname
·
Puerto por defecto es: 1433;
2.2.- En la clase Conexion.java cambiar los siguientes
valores de acuerdo a la base de datos
import javax.swing.*;
import java.sql.*;
public class Conexion {
private Connection con = null;
public Connection getConexion() throws SQLException{
import javax.swing.*;
import java.sql.*;
public class Conexion {
private Connection con = null;
public Connection getConexion() throws SQLException{
// **********Conexion a SqlServer **************
String driver = "
com.microsoft.sqlserver.jdbc.SQLServerDriver";
String
user = "sa";
String
password=" ";
try{
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
}catch(ClassNotFoundException ex){
JOptionPane.showMessageDialog(null,"No se encontro el driver jdbc instalado en el sistema!\n\n"+ex.getMessage(),"Error de conexion",JOptionPane.ERROR_MESSAGE); }
return con;
}
}
try{
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
}catch(ClassNotFoundException ex){
JOptionPane.showMessageDialog(null,"No se encontro el driver jdbc instalado en el sistema!\n\n"+ex.getMessage(),"Error de conexion",JOptionPane.ERROR_MESSAGE); }
return con;
}
}
2.3.- En caso de no
conectarse: Verificar que en SQL Server tenga:
propiedades
+ conexiones + permitir conexiones remotas.
y en seguridad + Modo
de Autenticación de windows y SQL Server
y
reiniciar el servicio con mouse derecho
Verificar
que en Seguridad + usuario: activar conceder y habilitado
en
conexión a BD e inicio de sesion
respectivamente
III) CONECTAR A Oracle
3.1.- Cargar la libreria de Oracle:
ojdbc
3.2.- En la clase Conexion.java cambiar los siguientes
valores de acuerdo a la base de datos3.1.- Cargar la libreria de Oracle:
ojdbc
import javax.swing.*;
import java.sql.*;
public class Conexion {
private Connection con = null;
public Connection getConexion() throws SQLException{
// **********Conexion a Oracle **************
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.7.127:1521:oracledb"; //oracledb es mi base de datos
String user = "progvisual";
String password="TICuarto";
try{
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
}catch(ClassNotFoundException ex){
JOptionPane.showMessageDialog(null,"No se encontro el driver jdbc instalado en el sistema!\n\n"+ex.getMessage(),"Error de conexion",JOptionPane.ERROR_MESSAGE); }
return con;
}
}
**********************************************************************
**************************** ANEXO II *******************************
CLASES DE LAS ENTIDADES Vo(Value Object)
**********************************************************************
******************* ANEXO III ****************************************
--------------------------------------------------------------------------------------------------





No hay comentarios.:
Publicar un comentario