individual 3 cliente-servidor · control a un panel procedemos a darle nombre a esos botones ......
TRANSCRIPT
Individual 3
cliente-servidor
Nombres: Boris Arias
Problema 1. Actualización de un registro. Ejemplifique y explique, bajo Swing, la actualización de un registro de una tabla de una base de datos. Considere en la ejemplificación el cubrir, como mínimo, los siguientes aspectos: 1.- Selección y consulta a la base de datos del registro a actualizar. 2.- Despliegue y modificación de los datos de registros. 3.- Almacenamiento de los datos modificados en la base de datos. Paso 1: Ejemplos Entrada/Salida
Para Selección y consulta a la base de datos del registro a actualizar Despliegue y modificación de los datos de registros. Almacenamiento de los datos modificados en la base de datos. 1.1 Entrada > [Programa] > Salida
> [Programa]>
Seleccionamos la id numero 12 la
cual nos despliega el registro que
hay existe.
En el cual en este caso deseamos
actualizar el sueldo de esa
persona del registro 12.
Actualizamos el sueldo del
empleado. Seleccionamos de nuevo
la id registro 12 y podemos ver que
sueldo se actualizo y almacenó en la
base de datos.
1.2 Entrada > [Programa] > Salida En el caso de buscar el registro número 1 y actualizar el apellido tendremos la siguiente entrada
Acá la entrada de
datos consultados son
todos aquellos que
poseen un valor 1 ya
que así se realizo la
consulta SQL
> [Programa]>
Condición De Borde
Como entrada solo se acepta un botón existente en la aplicación swing llamado conectar el
cual conecta con la base de datos previamente determinada en la conexión de código, si no
realizamos esto no podremos acceder a la base de datos ni mostrar, ni actualizar datos con los
demás botones.
Si presionamos el botón ver sin estar conectado a la BD este arroja una advertencia en una
etiqueta de que no está conectado a la BD o no tiene registros.
Si presionamos el botón ver conectado a la BD pero sin ningún dato en el campo de texto de la
ID este nos mostrara todos los registros que existen en la tabla.
Al momento de actualizar si no llenamos todos los campos tales como la ID, nombre, apellido,
sueldo es decir por ejemplo llenamos solo 2 al presionar actualizar este arrojara una etiqueta
de que faltan datos por completar o no sé a realizado la conexión
La salida mostramos
el nombre, apellido y
sueldo actualizado
con los demás datos
que poseen algún
numero 1
Paso 2: Análisis y Diseño
El problema nos pide que desarrollemos bajo una aplicación swing los siguientes aspectos
-Para Selección y consulta a la base de datos del registro a actualizar -Despliegue y modificación de los datos de registros. -Almacenamiento de los datos modificados en la base de datos.
Para comenzar primero creamos una clase “jFrame” para posteriormente realizar la aplicación
swing en netbeans por medio de los “swing controls” por medio de la palette en donde
tenemos una serie de botones, etiquetas, campos de texto, etc necesarios para crear una
aplicación
Maleta de controles para crear la
aplicación.
Una vez arrastrados los botones de
control a un panel procedemos a
darle nombre a esos botones,
etiquetas, etc. con el fin de darle
una mejor estructura a la aplicación
y darle la acción correspondiente a
cada botón, campo de texto,
etiquetas, etc
En nuestro código ya tenemos seleccionada la base de datos que vamos a utilizar
DriverManager.getConnection("jdbc:mysql://localhost/dacs","root","boris");
Ahora en nuestra aplicación poseemos 2 botones uno que se llama “conectar” y “desconectar”
los cuales le damos la respectiva acción de conectar y desconectar de la base de datos y un
jLabel que nos da conocer si estamos o no conectados
A continuación poseemos dos botones de los cuales les damos acciones el primero nos realiza
la conexión (botón conectar) en la cual le realizamos la conexión con my sql y si esto se
cumple en el jlabel que renombramos en jLconexion la cual le actualizamos su estado por
medio del jLconexion.setText y le pasamos la palabra “conectado” para saber que la conexión
se realizo satisfactoriamente.
Acá podemos ver lo botones que
utilizaremos en nuestra aplicación
jButton: son los botones a los cuales
les daremos acciones
jLabel: son etiquetas las cuales nos
mostraran información en la
aplicación
jTextField: son campos de texto que
pueden guardar información
jTable: nos mostrara una tabla
El segundo botón es para desconectarnos de la base de datos en el cual le pasamos
primeramente el conn la cual utilizamos para realizar la conexión anteriormente pero que
ahora le pasamos el atributo conn.close() para cerrar la conexión y modificamos la etiqueta
jLconexion.setText “desconectado” para dar cuenta de que ejecuto la acción .
Ahora para saber los datos que poseemos en la tabla podemos hacer un jtable la cual nos
muestre los datos que existen en una tabla de la base de datos, para esto realizamos lo
siguiente:
Primero declaramos la tabla modelo con un object que guarde las filas de la tabla que
crearemos
A continuación le damos acción al botón “ver”
Le daremos acción al botón
(jButton) “ver” y trabajaremos con
la id de nuestra tabla ya que es una
primary key (jTextField)
Ahora vamos al evento del botón ver y ejecutamos la consulta sql correspondiente:
Select * from empleado where NoEmpleado like ‘%+jTextField1.getText()+ %’
Realizamos esta consulta sql ya que nos mostrara todos los campos que posean el atributo
ingresado en el jTextField en la tabla y si no tienen datos mostrara la tabla con todos sus
registros.
A continuación reasignamos un
modelo en blanco y procedemos a
crear columnas a nuestra tabla las
cuales deben ser las mismas que la
de nuestra base de datos Empleado
Posterior a esto asignamos
primeramente el tamaño del arreglo
con la cantidad de columnas que
creamos en el paso anterior
Luego en el for vamos separando
cada fila y escribimos las filas con el
resultado SQL correspondiente
Con estos pasos podemos crear una consulta para buscar datos de una columna, en este caso
de la ID la cual captura el dato ingresado y ejecuta la respectiva sentencia para que muestre la
tabla con las características que cumplan con el dato ingresado por la ID y si el campo se
encuentra vacio esta muestra la tabla con todos sus registros.
Ahora para actualizar los registros de un dato creamos un botón actualizar (jButton)
Una vez ejecutado el botón ver este nos muestra el registro de la ID numero “12”
Posterior a esto vamos a la codificación del botón para actualizar registros en donde
realizamos lo siguiente:
Creamos una consulta my sql por medio del executeUpdate correspondiente:
Tenemos un botón actualizar y una etiqueta a
su costado en la aplicación
Nos basaremos para buscar al sujeto
que queremos actualizar su sueldo
por medio de la ID ya que por ser
primary key buscamos a la persona
especifica en este caso la ID “12”
cabe destacar que los demás
campos tales como el nombre
apellido y sueldo serán los atributos
que actualizaremos posteriormente
En donde el jTextField2.getText() guarda el campo de texto del nombre donde NoEmpleado es
igual a jTextField1.getText() en este caso este jTextField pertenece a la ID es decir en este caso
“12”. Para las otras dos actualizaciones es lo mismo solo que cambia el nombre de la columna
a actualizar (apellido,sueldo) y el jTextField porque son distintos campos de texto.
Al final de la actualización modificamos la etiqueta que se encuentra al costado del botón
actualizar para dar cuenta que “actualización exitosa”(jactual)
A continuación presionamos nuevamente ver para dar cuenta que el registro numero 12 se
actualizo correctamente (Apellido,Nombre,Sueldo)
Acá actualizamos el registro numero
12 y para demostrar que funciona
actualizaremos los 3 campos
disponibles para hacerlo
Actualización de la etiqueta por medio del
Jactual.setText
Paso 3: Especificación en DA
UML
Conexión mysql
conectado
desconectado error No conectado a la BD
Llene los campos
actualizar
NoEmpleado (ID)
Nombre
Apellido Sueldo
ver NoEmpleado (ID)
Apellido Nombre
FechaNacimiento
Sexo
Sueldo
NoDepartamento
Diagrama de flujo
Base de Datos
login
Conexión =! null
Conectado!!!! Desconectado!!!!
Si ID es nulo si botón
ver se ejecuta
Muestra todos los registros de la
tabla que estamos ocupando
Si ID no es nulo si botón
ver se ejecuta
Muestra los registros de la ID o que
tengan un valor igual al ingresado
Si ID no es nula, si nombre no es
nula si apellido no es nula si
sueldo no es nula
Si presiona
actualizar
Actualiza nombre, apellido, sueldo
Se actualizo correctamente
No está conectado a la BD y falta algún
registro o no existe
Paso 4: Implementación en Java
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import javax.swing.table.DefaultTableModel;
public class ejercicio1 extends javax.swing.JFrame {
public static DefaultTableModel modelo = new DefaultTableModel();
//filas
Object[] filas;
public ejercicio1(java.awt.Frame parent, boolean modal) {
initComponents();
jButton3.doClick();
}
Connection conn;
Statement stm;
public ejercicio1() {
initComponents();
}private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
conn = (Connection) DriverManager.getConnection
("jdbc:mysql://localhost/dacs","root","boris");
stm = (Statement) conn.createStatement();
jLconexion.setText("conectado!!");
//creamos conexion con mysql la base de datos y si se cumple esto
modificamos el jLabel a “conectado”
}
catch(Exception e){
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try{
conn.close();
jLconexion.setText("desconectado");
}// y si presionamos el boton desconectar este cierra la conexion y
modifica la etiqueta
catch(Exception e){
}
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
try{
stm.executeUpdate("update empleado set nombre
='"+jTextField2.getText()+"' "+ "where
NoEmpleado='"+jTextField1.getText()+"'");
stm.executeUpdate("update empleado set apellido
='"+jTextField3.getText()+"' "+ "where NoEmpleado=
'"+jTextField1.getText()+"'");
stm.executeUpdate("update empleado set sueldo
='"+jTextField4.getText()+"' "+ "where NoEmpleado=
'"+jTextField1.getText()+"'");
jactual.setText("actualizacion exitosa!");
//creamos la actualización con el comando sql le pasamos los
atributos del jTextField y modificamos la etiqueta
jTextField1.setText("");//una vez ejecutada la acción dejamos en
blanco los campos de texto
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
}
catch(Exception e){
jactual.setText("no hay datos o no a realizado la coneccion para
poder actualizar");
}
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
try {
Statement consulta=(Statement) conn.createStatement();
ResultSet rs = consulta.executeQuery
("select * from empleado where NoEmpleado like
'%"+jTextField1.getText()+"%'");//textField de busqueda
// reasigno un modelo en blanco:
modelo = new DefaultTableModel();
jTable1.setModel(modelo);
//creamos la columnas de nuestra tabla:
modelo.addColumn("NoEmpleado");
modelo.addColumn("Apellido");
modelo.addColumn("Nombre");
modelo.addColumn("FechaNacimiento");
modelo.addColumn("Sexo");
modelo.addColumn("Sueldo");
modelo.addColumn("NoDepartamento");
//asigno el tamaño del arreglo con la cantidad de columnas:
filas = new Object[modelo.getColumnCount()];
//escribo las filas:
while (rs.next())
{ //cantidad de columnas
for (int i=0;i<modelo.getColumnCount();i++){
filas[i] = rs.getObject(i+1);
}
//escribo las filas del resultado SQL//
modelo.addRow(filas);
jTable1.setModel(modelo);
}
}
catch (Exception e){
jLconexion.setText("no hay datos o no a realizado la coneccion");
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new ejercicio1().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLconexion;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JLabel jactual;
// End of variables declaration
}
Visualización de la aplicación swing
Problema 2. Uso de jComboBox (40 ptos.)
El adecuado uso de la clase jComboBox con datos almacenados en una tabla de
una base de datos, requiere que se establezca o se maneje en forma integrada el
identificador (que será utilizado posteriormente) y la descripción que será
desplegada en el jComboBox. Para resolver aquel problema es posible, en internet,
encontrar código como el siguiente, donde ClaseParaComboBox es una clase
especialmente desarrollada para cumplir con lo anterior:
public class ClaseParaComboBox{
private String nombreDeEjemplo;
private int codigo;
public ClaseParaComboBox(int codigo, String nombreDeEjemplo){
this.codigo=codigo;
this.nombreDeEjemplo=nombreDeEjemplo;
}
public String getNombreDeEjemplo() {
return nombreDeEjemplo;
}
public void setNombreDeEjemplo(String nombreDeEjemplo) {
this.nombreDeEjemplo = nombreDeEjemplo;
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String toString()
{
return nombreDeEjemplo;
}
}
Ello permitiría integrar tanto el nombre como su identificador en los ítemes del
jComboBox,
usualmente mediante esta sentencia:
jComboBoxEjemplo.addItem(new ClaseParaComboBox(1,"ItemEjemploNº1"));
Para mostrar los items desde el jComboBox, cuando son objetos como en este
caso, se usa lo que
devuelve el método toString() de la clase definida.
Y para usar, los valores de, por ejemplo, identificación se usa una instancia de la
clase, como se puede
ver en este ejemplo:
ClaseParaComboBox objeto=(ClaseParaComboBox) jComboBoxEjemplo.getItemAt(1);
System.out.println(objeto.getCodigo);
System.out.println(objeto.getNombreDeEjemplo);
Note que en la sentencia anterior se hace un casting para asignar el item del
jComboBox a un objeto de
la clase ClaseParaComboBox.
Se pide que usted adapte todos y cada uno de los trozos de código anterior para
usar el jComboBox con
los datos de una tabla de su elección que, al menos, tenga un identificador y una
descripción. Y que
pruebe esa adaptación en una aplicación que lea los datos de dicha tabla, construya
el jComboBox,
permita seleccionar uno de los items y despliegue en un jLabel el identificador del
item seleccionado.
Paso 1: Ejemplos Entrada/Salida
1.1 Entrada > [Programa] > Salida Como entrada tenemos la siguiente estructura del programa en swing
> [Programa]>
Como salida podemos ver el programa en ejecución y solo seleccionando el nombre del
combobox podemos seleccionarla y esta nos retornara los datos en una etiqueta tales como
Noempleado , apellido y sueldo.
Condición De Borde
En torno a la aplicación en si no posee muchas complicaciones ya que al ejecutar el programa
este se conectara directamente a la base de datos y el único manejo que es utilizable es el
combobox ya que es el que determinara que datos nos mostrara en las etiquetas para conocer
datos
Paso 2: Análisis y Diseño
Para comenzar creamos la aplicación en swing por medio de la maleta (Swing controls) los
cuales arrastramos al panel y vamos dando forma a nuestra aplicación según sus
requerimientos y necesidades en este caso para el uso del jcombobox
Atributos swing que utilizaremos en
la clase jframe
Primeramente orientándonos a lo que se nos pide creamos una clase para definir los
constructores y sus variables con el fin de que sean llamados posteriormente, comenzamos:
En primer lugar definimos las
variables que utilizaremos
posteriormente para ser llamados
por los métodos
Creamos el método que retorna y
actualiza NoEmpleado
Creamos el método que retorna y
actualiza el nombre
Para cada variable declarada asignamos un método de retornar y actualizar .Para luego al final
llamar al método que utilizaremos para llenar el combobox mas adelante.
Creamos el método que retorna y
actualiza el apellido
Creamos el método que retorna y
actualiza el sueldo
Finalmente en esta clase
retornamos el método nombre el
cual será utilizado para llenar el
combobox en la otra clase.
A continuación creamos una nueva clase llamada “conexión” en la cual realizamos la conexión
con la base de datos y llamaremos a los métodos de la clase empleado.
Comenzamos implementando lo que son las librerías correspondientes para la clase
“conexión”
Comenzamos llamando a la clase empleado en el list <empleado> y creamos la conexión con
la base de datos con:
la base de datos el usuario y su contraseña
Librerías para la clase conexión a
utilizar importante destacar la
importación de list y arrayList ya que
estas nos permitirán llamar a los
métodos
Luego de realizar la conexión con la base de datos realizamos la consulta sql de seleccionar la
tabla.
Una vez hecho esto implementamos un list <empleado> el cual nos permitirá llamar a los
métodos de la clase empleados y el listabox que es una variable utilizada en la clase jFrame
mas adelante para cargar los datos al combobox.
Luego llamamos a los métodos de la tabla empleado la guardamos en una variable combo y
luego está la adherimos a listabox la que esta implementada para cargar el jcombobox
Para seguir ahora nos vamos a la clase jFrame en donde creamos instancia cargarComboBox()
que utilizaremos para llenar nuestro jcombobox de swing
Ahora procederemos a cargar el jcombobox por medio del
list<emplado> listabox=conexiones.lista()
Gracias a esto podemos utilizar atributos de otras clases y por medio del listabox
implementado en la clase conexiones vamos llenando el jcombobox ya que si bien
recordamos en la clase empleado al final retornábamos el metodo nombre el cual
utilizaremos para llenar el jcombobox con la identificación para ser mostrados por medio de
un ciclo for y que al jcomboBox1 agregué la listabox(nombre).
A continuación nos vamos hacia el jcombobox1 y le damos acción en donde llamamos al
método con todos los atributos que llamamos anteriormente (jcombobox1 posee la columna
nombre de la tabla) esto quiere decir que el jcombobox mostrara los registros existentes en la
columna nombre.
Y para a su vez mostrar los demás datos en los jlabel llamamos los otros métodos de la clase
conexiones que los mostraremos en sus respectivas etiquetas
A finalmente obtenemos el resultado esperado por medio de métodos generar un combobox
y que muestre los demás datos de esa tabla en un j label
Paso 3: Especificación en DA
Aplicación swing Carga ComboBox
Muestra ComboBox
conexiones conectado
Retorna set listaboox
empleado
Retorna get
Retorna set
Base de datos
login
Conexión=!null Error!!!
Conectado!!!
Consulta(select * from empleado)
while(rs.next())
combo.setNoEmpleado(rs.getString("NoEmpleado"));
combo.setnombre(rs.getString("nombre"));
combo.setapellido(rs.getString("apellido"));
combo.setsueldo(rs.getInt("sueldo"))
listabox.add(combo);
String NoEmpleado;
String nombre;
String apellido;
Int sueldo;
Retorna y actualiza Noempleado
Retorna y actualiza nombre
Retorna y actualiza apellido
Retorna y actualiza sueldo
Devuelve String nombre
Cargar combobox
empleado combobox =(empleado)jComboBox1.getSelectedItem();
combobox!=null
actualiza(combobox.retornaNoEmpleado());
actualiza (combobox.retornaapellido());
actualiza (combobox.retoransueldo());
Paso 4: Implementación en Java
En este paso ocupamos 3 diferentes clases
package codigo;
public class empleado
{
//definimos las variables
private String NoEmpleado;
private String nombre;
private String apellido;
private int sueldo;
//implementamos el metodo para retornar
public String getNoEmpleado()
{ return NoEmpleado;}
//omplementamos el metodo para setear
public void setNoEmpleado(String NoEmpleado)
{ this.NoEmpleado = NoEmpleado;}
public String getnombre()
{ return nombre; }
public void setnombre(String nombre)
{ this.nombre = nombre; }
public String getapellido()
{ return apellido; }
public void setapellido(String apellido)
{ this.apellido = apellido; }
public int getsueldo()
{ return sueldo; }
public void setsueldo(int sueldo)
{ this.sueldo = sueldo; }
@Override
//retornamos este metodo ya que lo utilizaremos para cargar el
jcombobox
public String toString()
{ return this.nombre; }
}
//==============================================================
package codigo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Conexiones{
static Connection conn;
public static List<empleado> lista(){
try {
Statement s;
ResultSet rs;
DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
conn =
DriverManager.getConnection("jdbc:mysql://localhost/dacs","root","boris");
s = conn.createStatement();
String consulta = "Select * from empleado";
//generamos consulta sql
s = conn.createStatement();
rs = s.executeQuery(consulta);
List<empleado> listabox = new ArrayList<empleado>();
//con el list podemos llamar metodos de las otras clases
while(rs.next()) {
empleado combo = new empleado();
combo.setnombre(rs.getString("nombre"));
combo.setNoEmpleado(rs.getString("NoEmpleado"));
//llamamos a los metodos y realizamos la consulta
combo.setapellido(rs.getString("apellido"));
combo.setsueldo(rs.getInt("sueldo"));
listabox.add(combo); //la consulta la guardamos en el
listabox para cargar el combobox
}
return listabox;
}
catch(Exception ex)
{
return null;
}
finally
{
try
{
conn.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
}
}
//===============================================================
package codigo;
import java.util.List;
public class ejercicio2 extends javax.swing.JFrame {
public ejercicio2() {
initComponents();
cargarComboBox();
}
private void cargarComboBox()
{
List<empleado> listabox=Conexiones.lista();
//con el list llamamos a los metodos
if(listabox!=null)
{
int size=listabox.size();
// hacemos esto para que ingrese cada dato de la tabla
for(int i=0;i<size;i++)
{
jComboBox1.addItem(listabox.get(i));
//adherimos esta informacion al jcombobox
}
}
}
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt)
{
empleado combobox = (empleado)jComboBox1.getSelectedItem();
if(combobox!=null) {
jLabel5.setText(combobox.getNoEmpleado()+"");
//las columnas la aplicamos en las etiquetas
jLabel6.setText(combobox.getapellido()+"");
jLabel7.setText(combobox.getsueldo()+"");
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ejercicio2().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
// End of variables declaration
}
Problema 3.- jTable y JOIN (40 ptos.)
Resuelva el problema de ingresar una sentencia SELECT que incluya el uso de
JOIN en un jText y que, luego de presionar un botón de ejecución, aquello entregue
como resultado una jTable que contenga los datos de la consulta. Un adecuado
ejemplo de aquello, pero más complejo obviamente, es lo que hace NetBeans con el
manejo de las consultas SQL. En la imagen se puede ver la sentencia (que incluye
JOIN) y la tabla que se despliega (junto con el botón de ejecución):
Paso 1: Ejemplos Entrada/Salida
1.1 Entrada > [Programa] > Salida Tenemos la siguiente entrada swing
> [Programa]>
Realizamos una consulta join la cual nos une dos tablas por un factor común
1.2 Entrada > [Programa] > Salida También podemos realizar otro tipo de consultas mysql como seleccionar una tabla y muestre
los registros
> [Programa]>
Por medio de un select podemos ver los registros de una tabla cualquera de la BD
Condición De Borde
Si presionamos el botón consultar si este poseer ningún campo de texto en my sql el
programa por medio de un jlabel arroja error.
Si presionamos el botón consultar y este posee un campo llenado pero que no es compatible
con my sql el programa arroja un error en un jlabel .
Si aplico una sentencia “show databases” esta me muestra las bases de datos existentes pero
no puedo usar un “use” para seleccionar una base de datos.
Al igual que no se pueden realizar cambios de alteración de tablas ya que el botón que
permite ejecutar es un select el cual es que uno ingresa por medio del textfield y poder
visualizar registros de una base de datos especifica ya que esta especificada en la conexión .
Paso 2: Análisis y Diseño
Creamos primero una aplicación acorde a la actividad solicitada
-Creamos la aplicación en swing con
la maleta de controles.
-Y ocupamos los controles
necesarios
Comenzamos primero declarando las librerías que utilizaremos tales como la de sql como
declarar la tabla por default
La sentencia String “sintaxis” es de suma importancia ya que esta será el atributo que
contendrá la sentencia ingresada en my sql.
Y el metadato será se suma importancia ya que gracias a el podremos guardar la descripción
de los datos
Posterior a eso generamos la conexión a la base de datos por medio del driver ,usuario y
contraseña y establecemos conexión.
Declaramos las variables
necesarias para la codificación
tales como de conexión, result
set , de la tabla etc
Ahora le damos acción a nuestro botón consultar
Nos introducimos en su ejecución y denotamos lo siguiente:
El for que introducimos primeramente lo utilizaremos para que al momento de introducir una
sentencia este limpia los registros y datos que contenga la tabla en ese momento, esta acción
final la realisa el table.removeRow(i)
jtextField1.getText() es el campo de texto que recibe la sentencia my sql la cual es recibida por
la variable que declaramos anteriormente (sintaxis)
-Realizamos la consulta
correspondiente al TextField por
medio de la sintaxis
-trae el paso de la sentencia a la
table
-para guardarlo posteriormente a
los metadatos
-Después de esto debemos contar el numero de las columnas , esto lo realizamos con la
primera línea la cual captura estos datos en un metadato.
-en la segunda línea crea etiqueta del largo de numero de columnas utilizando el for (tercera
linea)
-Para después en la cuarta línea guarda en etiquetas lo que obtiene de metadato
Para luego con estos antecedentes poder crear un modelado de la tabla
Creamos filas en la tabla
Se rellena cada posición del array
con una de las columnas de la tabla
Se añade al modelo la fila completa.
Cerramos el try…
De caso contrario en un jLabel1.setText capturamos la sentencia errónea y tecleamos error
Paso 3: Especificación en DA
Base de datos
pass
Conexión!=null
Error ¡!!!
conectado
Si botón consulta==1 y
jTextField1 no nulo
Limpia jtable
table.removeRow
sintaxis=jTextField1.getText();
rs = s.executeQuery(sintaxis);
jTable1.setModel(table);
metaDatos = rs.getMetaData();
int Ncolum =
metaDatos.getColumnCount();
//cuenta las columnas de la
sentencia
Object[] etiquetas = new
Object[Ncolum];
//crea etiqueta del largo de
numero de columnas
for (int i = 0; i < Ncolum; i++)
guarda en etiquetas i
//crea modelado de la tabla
while (rs.next())
Object[] fila = new
Object[Ncolum];//crea
filas de la tabla
for (int i = 0; i < Ncolum; i++) {
fila[i] = rs.getObject(i + 1);
Se añade al modelo la fila
completa
sintaxis posee un error
Paso 4: Implementación en Java
package pregunta3;
import java.sql.*;
import javax.swing.table.DefaultTableModel;
public class ejercicio3 extends javax.swing.JFrame {
Connection conn;
Statement s;
//declaramos las variables que utilizaremos en el codigo
ResultSet rs;
DefaultTableModel table = new DefaultTableModel();
//declaracion de la tabla por defecto
String sintaxis;
//la utilizaremos para llamarla desde el texfield como sentencia sql
ResultSetMetaData metaDatos;
//se utiliza para guardar descripcion de datos
public ejercicio3() {
try {
DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
//definimos la conexion con mysql y utilizaremos la BD dacs
conn =
DriverManager.getConnection("jdbc:mysql://localhost/dacs","root","boris");
s = conn.createStatement();
} catch (Exception e) {
}
initComponents();
}private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
for (int i = table.getRowCount() -1; i >= 0; i--){
//al momento de realizar una new sentencia por medio del for limpia jtable
table.removeRow(i);
}
sintaxis=jTextField1.getText();
//guarda variable en jtexfield sentencia sql
rs = s.executeQuery(sintaxis);
// realizando consulta del jtextfield
jTable1.setModel(table);
//trae tabla de sentencia
metaDatos = rs.getMetaData(); //guarda
int Ncolum = metaDatos.getColumnCount();
//cuanta las columnas de la sentencia
Object[] etiquetas = new Object[Ncolum];
//crea etiqueta del largo de numero de columnas
for (int i = 0; i < Ncolum; i++) {
etiquetas[i] = metaDatos.getColumnLabel(i + 1);
//guarda en etiquetas lo que obtiene de metadatodo
}
table.setColumnIdentifiers(etiquetas);
//crea modelado de la tabla
while (rs.next()) {
Object[] fila = new Object[Ncolum];
//crea filas de la tabla
// Se crea un array que será una de las filas de la tabla.
// Se rellena cada posición del array con una de las columnas de la tabla
for (int i = 0; i < Ncolum; i++) {
fila[i] = rs.getObject(i + 1);
// El primer indice en rs es el 1, no el cero, por eso se suma 1.
}
// Se añade al modelo la fila completa.
table.addRow(fila);
}
}
catch(Exception e){
// en caso contrario tira error
jLabel1.setText(" '"+sintaxis + "' posee un error!!!!
");
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ejercicio3().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}