Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación Visual II
del IV ciclo de la escuela
de Ingeniería de
Sistemas de la ULADECH
Elaborado por:
INDICE
Página
CAPITULO I
OTROS OBJETOS DEL PAQUETE SWING
Objeto JTextArea
La primera es que su tamaño es el justo para el texto que lleva dentro. Es decir,
inicialmente, su tamaño es de una fila de letras de alto y cero pixeles de ancho, ya
que no tiene texto. Según vamos escribiendo, va cambiando de tamaño. No es
buena idea dejarlo así, ya que nos pueden pasar cosas raras. En el constructor del
JTextArea podemos decirle cuántas filas queremos que tenga y cuántas columnas.
En el ejemplo vamos a poner 10 filas y 50 columnas, pero también se puede
agregar algún texto en nuestros JTextArea, como se verá a continuación:
La tercera cosa que debemos saber es que el JTextArea por defecto no hace
automáticamente los saltos de líneas. Es decir, si nosotros no hacemos de forma
manual los saltos de línea, nuestro texto se escribirá en una línea de varios
kilómetros. Para solucionar esto existen dos métodos: el primero corta las líneas de
forma automática, pero no respeta las palabras, es decir las corta al momento de
llegar al final de la línea sin importar si hay un espacio o no; el segundo método
complementa al primero haciendo que las palabras de corten sólo cuando
encuentra un espacio cerca. Los métodos son los siguientes:
// Para que haga el salto de línea buscando espacios entre las palabras
jtx.setWrapStyleWord(true);
Con todo esto, la forma de crear el JTextArea y añadirlo al JFrame será así:
import javax.swing.*;
import java.awt.*;
jtx.setLineWrap(true);
jtx.setWrapStyleWord(true);
ventana.getContentPane().add(scroll, BorderLayout.CENTER);
ventana.add(scroll);
ventana.setVisible(true);
Lo cuarto es que nuestros JTextArea pueden ser editados por el usuario o puede
ser de sólo lectura, dependiendo de la propiedad setEditable(), el valor booleano
false sólo da permiso de lectura:
texto.setEditable(false);
jtx.setFont(font);
Normal=PLAIN
Cursiva=ITALIC
Negrita=BOLD
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
JFrame.setDefaultLookAndFeelDecorated(true);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
String text = "Un objeto JTextArea es una área multilínea para escribir texto. "
+ "Y puedes agregar tu TextArea en un JScrollPane para poder mover las zonas de
texto." ;
frame.getContentPane().add(scroll, BorderLayout.CENTER);
frame.add(scroll);
//El método setLineWrap lo que hace es ordenar las palabras para que no se salgan
de los márgenes,
textAreal.setLineWrap (true);
textArea2.setLineWrap (true);
textAreal.setWrapStyleWord(true);
Ing. Martín Salcedo Quiñones Página 8
Universidad Católica Los Ángeles de Chimbote – Programación Visual II
textArea2.setWrapStyleWord(true);
//nota: el textArea2 está dentro de un JScrollPane, por eso éste es el que agregamos
al frame
frame.add(textAreal);
frame.add(scroll);
//el metodo pack sirve para dejar todo dentro del frame
frame.pack();
frame.setVisible(true) ;
Objeto JToolBar
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
// llamada JToolBar
JToolBar barra = new JToolBar("barra");
//creación de botones
JButton copiar = new JButton("Copiar");
JButton cortar = new JButton("Cortar");
JButton pegar = new JButton("Pegar");
barra.add(copiar);
ventana.getContentPane().add(barra);
ventana.setVisible(true);
ventana.setResizable(false);
}
}
Objeto JSlider
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JSlider;
import javax.swing.JFrame;
public class Slider{
public static void main(String[] args) {
//código
Ahora en la sección de “//código” se realizara todo lo que tenga que ver con nuestro
JSlider, y los detalles para poder verlos en una ventana como en la imagen anterior.
//código:
Constructor:
Métodos:
Luego de haber explicado los métodos usados en nuestro JSlider (no son los
únicos métodos existentes a todo esto), continuaremos con el fin del programa que
consiste en: Luego de haber creado nuestro JSlider, y nuestro JLabel, lo siguiente
Luego agregamos a nuestro panel (JPanel) a la ventana (JFrame), puesto que gracias a
está podemos ver nuestro JSlider en acción, esto se realiza Con el siguiente código:
Luego de haber visto por partes nuestro código vamos a ajustar nuestros últimos
detalles en el código completo.
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JSlider;
import javax.swing.JFrame;
public class Slider{
static JSlider slider; /*se deben instanciar antes para poder usarlos en el método creado
mas abajo */
static JLabel label; /*y a la vez estaticos (static) también para poder ser usados en
nuestro método creado. */
public static void main(String[] args){
JFrame ventana = new JFrame("COme On!!");
ventana.setSize(400, 400);
JPanel panel = new JPanel();
Objeto JProgressBar
Seguramente, todos alguna vez hemos grabado o cargado un nuevo programa en
nuestro equipo, y mientras se realizaba esa grabación algo nos indicaba cuánto se
llevaba completado de la operación o cuánto faltaba. Este es sólo un ejemplo de los
muchos casos en los que los indicadores de progreso son útiles.
Por norma general, un buen programa o un programa amigable utilizará estas
herramientas cuando una operación tarde en completarse un tiempo prudencial.
Tenemos que declarar todos los componentes GUI. Declaramos, por supuesto, un
JFrame y un CONTAINER, y también necesitamos un botón y una barra de
progreso.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
//Marco visible
frmMain.setResizable(false);
frmMain.setVisible(true);
//addActionListener
btnDo.addActionListener(new btnDoAction());
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
pane = frmMain.getContentPane();
pane.setLayout(null);
frmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); btnDo = new
frmMain.setResizable(false);
frmMain.setVisible(true);
btnDo.addActionListener(new btnDoAction());
}
Objeto JPasswordField
Objeto JInternalFrame
Este componente proviene de la clase JFrame , el cual crea ventanas que van
apareciendo en una barra de herramientas. Es una ventana dentro de otra
ventana. Con esta interfaz podemos permitir al usuario tener varias ventanas
abiertas que se procesan al mismo (llamadas ventanas hijas), pero dentro de
otra ventana (llamada ventana padre). Lo importante es darle el tamaño y la
posición al JInternalFrame , ya que si no lo damos lo veremos de tamaño 0 y en
la posición (0,0) y por lo tanto no aparecerá. El tamaño máximo que pueden
alcanzar las ventanas de tipo JInternalFrame es el tamaño de la ventana padre.
Por defecto el objeto JInternalFrame no es redimensionable ni se puede cerrar
ni tiene botones de maximizar y minimizar. Es necesario conocer los métodos
adecuados para el manejo de este tipo de ventanas.
Ejemplo 2
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
int pos = 0;
for (JInternalFrame internalFrame : internalFrames) {
desktop.add(internalFrame);
internalFrame.setVisible(true);
}
frame.add(desktop, BorderLayout.CENTER);
frame.setSize(500, 300);
frame.setVisible(true);
}
}
Ejecutando el código, se muestra la siguiente ventana
Ejemplo 3
Usando los objetos JPasswordField y JInternalFrame
import javax.swing.*;
import java.awt.*;
Objeto JDialog
En una aplicación java con ventanas debería haber un único JFrame,
correspondiente a la ventana principal de la aplicación. El resto de ventanas
secundarias deberían ser JDialog. Por supuesto, podemos usar JInternalFrame, si
lo deseamos sin ningún problema, pero en ésta sesión nos referimos sólo a
ventanas "reales", a las que el sistema operativo trata como tales.
Un JFrame en una ventana que en Windows crea, en la barra de herramientas,
donde está el menú de "inicio" y las aplicaciones que tenemos abiertas, un nuevo
botón de aplicación abierta. En una aplicación lo normal es que sólo haya un botón
ahí. Si creamos varios JFrame en nuestra aplicación, aparecerán varios botones,
uno por cada JFrame.
El JDialog no muestra este botón. Por ello, el resto de las ventanas de nuestra
aplicación deberías ser JDialog.
Hay otro motivo más. Un JFrame no admite a ninguna otra ventana como padre. El
JDialog sí admite como padres un JFrame u otros JDialog. Esto es importante
porque una ventana hija siempre quedará por encima de su ventana padre. Si al
crear los JDialog les pasamos el JFrame como padre, los JDialog siempre estarán
visibles por encima del JFrame. No se podrán ir "detrás" de él. Si además, en el
constructor del JDialog ponemos a true el flag que indica que es modal, además de
pasarle una ventana padre, entonces el JDialog impedirá el acceso a las otras
ventanas hasta que se cierre. Otra ventaja de admitir un padre es que heredan el
icono de él. Si hemos cambiado el icono del JFrame con el método
setIconImage(), entonces todos los JDialog que hagamos como hijos de este
JFrame heredarán el icono. Todas las ventanas de nuestra aplicación tendrán el
mismo icono en lugar de la taza de café por defecto.
public DosVentanas()
{
// Construcción de ventana principal
ventanaPrincipal = new JFrame("Ventana principal");
JButton boton = new JButton("Abre secundaria");
ventanaPrincipal.getContentPane().add(boton);
ventanaPrincipal.pack();
});
Objeto JTree
El JTree es el componente java visual (como los botoncitos, listas, menús, etc) que
nos permite visualizar un árbol. En él podemos ver el típico árbol de datos en el que
podemos abrir cada uno de los nodos para ver qué tiene dentro, cerrarlos, etc.
Similar al árbol de directorios que nos muestran algunas aplicaciones para elegir un
fichero.
Como en casi todos los componentes visuales de java, hay dos clases importantes
implicadas. Por un lado tenemos "la vista", que es la clase java que se ve. Esta
clase es el JTree y es lo que se ve en la pantalla, en nuestra ventana. Por otro lado
tenemos el "modelo de datos". Esta clase de java puede ser cualquier clase que
implemente la interface TreeModel, pero java nos ofrece ya implementada la clase
DefaultTreeModel. Esta clase es la que contiene los datos que queremos
visualizar en "la vista". Contiene los datos que visualizaremos en el JTree.
Puesto que vamos a hacer un árbol, admite datos que se puedan asociar entre sí
como padres e hijos. No valen datos cualesquiera. Esos datos deben implementar
la interface TreeNode. Cualquier clase que implemente esta interface, tendrá
métodos para interrogarle sobre quién es su padre, si tiene hijos, etc. Estos
métodos será los que acabe usando JTree para saber qué debe pintar, quién es
hijo de quién y quién es padre de quién. Existe otro tipo de dato también
importante, el MutableTreeNode. Este es igual que el anterior, pero además tiene
métodos para modificar las asociaciones entre padres e hijos. Permite añadir
nuevos hiijos a los padres, cambiar el padre de los hijos y cualquier otro tipo de
{
public static void main(String[] args)
{
// Construccion del arbol
DefaultMutableTreeNode abuelo = new DefaultMutableTreeNode("abuelo");
DefaultTreeModel modelo = new DefaultTreeModel(abuelo);
JTree tree = new JTree(modelo);
Objeto JFormattedTextField
Para editar cualquier tipo básico de java, estilo Integer, Float, Double, Date, etc,
basta con llamar al método setValue() del JFormattedTextField pasándole uno de
estos tipos de datos, o bien pasárselo en el constructor. Por ejemplo, para Integer, nos
bastaría con cualquiera de los dos casos siguientes:
Con esto ya tenemos un editor que nos permite recoger Integer directamente
cuando el usuario lo edite:
Supongamos que quiero un editor que me permita escribir un número con dos cifras
enteras y dos decimales. No queremos que el usuario escriba algo que no sea un
número y no queremos que escriba ni más ni menos de las cifras de las indicadas.
El editor debe admitir y devolvernos con setValue() y getValue() un Float.
try
{
/* El "patrón" para el editor. Las # representan cifras. En la API puedes ver más. Ojo con el punto
decimal, según el idioma puede ser una coma.*/
MaskFormatter mascara = new MaskFormatter("##.##");
// Se construye el JFormattedTextField pasándole la máscara
JFormattedTextField textField = new JFormattedTextField(mascara);
// Se da un valor inicial válido para evitar problemas
textField.setValue(new Float("12.34"));
}
catch (...)
Ya está listo. Nuestro editor sólo admite números de dos cifras enteras y dos
decimales y no nos deja escribir otra cosa. Los métodos getValue() y setValue()
devuelven y admiten Floats.
AUTOEVALUACION
2. Método del objeto Slider que permite colocar las rayitas que marcan los números,
se denomina __________________
CAPITULO II
ACCESO Y MANTENIMIENTO DE DATOS
Ing. Martín Salcedo Quiñones Página 42
Universidad Católica Los Ángeles de Chimbote – Programación Visual II
¿Qué es un JDBC?
Para la gente del mundo Windows, JDBC es para Java lo que ODBC es para
Windows. Windows en general no sabe nada acerca de las bases de datos, pero
define el estándar ODBC consistente en un conjunto de primitivas que cualquier
driver o fuente ODBC debe ser capaz de entender y manipular. Los programadores
que a su vez deseen escribir programas para manejar bases de datos genéricas en
Windows utilizan las llamadas ODBC.
Modelo de 2 capas
Modelo de 3 capas
El presente modelo, las instrucciones son enviadas a una capa intermedia entre
Cliente y Servidor, que es la que se encarga de enviar las sentencias SQL a la base
de datos y recoger el resultado desde la base de datos. En este caso el usuario no
tiene contacto directo, ni a través de la red, con la máquina donde reside la base de
datos.
Para trabajar con el API JDBC se tiene que importar el paquete java.sql, tal y como
se indica a continuación:
import java.sql.*;
En este paquete se definen los objetos que proporcionan toda la funcionalidad que
se requiere para el acceso a bases de datos. El siguiente paso después de importar
el paquete java.sql consiste en cargar el controlador JDBC, es decir un objeto
Driver específico para una base de datos que define cómo se ejecutan las
instrucciones para esa base de datos en particular.
Hay varias formas de hacerlo, pero la más sencilla es utilizar el método forName()
de la clase Class:
Class.forName("Controlador JDBC");
Debe tenerse en cuenta que el método estático forName() definido por la clase
Class genera un objeto de la clase especificada. Cualquier controlador JDBC tiene
que incluir una parte de iniciación estática que se ejecuta cuando se carga la clase.
En cuanto el cargador de clases carga dicha clase, se ejecuta la iniciación estática,
que pasa a registrarse como un controlador JDBC en el DriverManager.
Una vez en el método principal llamado main se declara la variable objeto conn y a
través de la instrucción try se busca proteger la ejecución ante posibles errores (lo
que se denomina manejo de excepciones).
Una aplicación en Java para que logre comunicarse con una base de datos usando
la API
mysql-connector-java-5.0.XX.jar
Existe versiones superiores como la versión 5.0 para dicho conector. NetBeans nos
permite la tarea de conectar una aplicación a una base de datos
7. Ahora procedemos a la conexión de una base de datos, que en este caso será
la base de datos transportes, la misma que ya se encuentra creada
conjuntamente con las tablas de Ciudad y Ruta. Seleccionamos la pestaña
Prestaciones y en Base de Datos seleccionamos la carpeta Controladores.
8. Para agregar el conector MySQL, haga clic en el botón derecho del mouse en el
nodo o carpeta Controladores y seleccione la opción Nuevo Controlador
jdbc:mysql://servidor:puerto/baseDatos
15. Damos clic en el botón de comando OK. A continuación aparecerá una ventana
confirmando la conexión con la base de datos de universidad. Luego damos clic
en el botón de comando Aceptar
NetBeans nos permite hacer operaciones sobre la base de datos como crear y
borrar, tablas, agregar y eliminar columnas, agregar, modificar y eliminar registros
de datos como realizar consultas.
4. Vamos a proceder a crear la tabla de Area con los campos idarea char(2),
descripcion varchar(28). Una vez indicado los campos damos clic en el botón de
comando Aceptar.
Para realizar una aplicación para que realice cualquier operación de lo más sencilla
posible se necesita de la utilización de varias clases e interfases. JDBC ofrece el
paquete java.sql en la que existen clases e interfaces muy útiles para trabajar con
base de datos. Veamos las más importantes clases o interfases y en la medida en
que se desarrolle las sesiones se detallarán más mencionando los métodos que
tienen para hacer fácil el acceso a la base de datos.
El primero de los métodos sirve para crear un objeto del tipo Statement. Las
frases SQL se ejecutan normalmente mediante la utilización de objetos del
tipo Statement. Finalmente, es conveniente cerrar las conexiones tan pronto
como dejen de utilizarse para liberar recursos. No obstante, ha de tenerse en
cuenta que establecer una conexión es una operación costosa, por lo que
tampoco se debe estar abriendo y cerrando la conexión con frecuencia.
Además, existen otros métodos gracias a los cuales es posible recorrer los
resultados guardados en el objeto de tipo ResultSet.
3. Damos clic botón derecho sobre el diseño del formulario para cambiar el
Asignar Diseño a Diseño Absoluto, lo cual nos permitirá usar los objetos de
control más libremente.
5. Borramos los Items de cada objeto Jlist y colocamos los nombres a cada objeto
de control. Recuerden que para eliminar los items de cada Jlist hay que hacer
uso de model que se encuentra en la ventana de propiedades.
lstCod
lstEsc
lstFac
Un JTable es un componente visual de java que nos permite dibujar una tabla, de
forma que en cada fila/columna de la tabla podamos poner el dato que queramos;
un nombre, un apellido, una edad, un número, etc.
El siguiente gráfico intenta mostrar cómo cada componente JTable obtiene siempre
sus datos desde un modelo de tabla.
Veamos a continuación un programa que hace uso del objeto JTable y llena al
mismo a través de una matriz y agrega una columna a través de un vector.
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
dtm.setValueAt("Catherine", 1, 1);
//se define el tamaño
getContentPane().add(scrollPane, BorderLayout.CENTER);
//manejamos la salida
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
EjemploTabla frame = new EjemploTabla();
frame.pack();
frame.setVisible(true);
}
}
Permite que la matriz data sea el contenido del modelo dtm y el vector
columnNames sea los títulos de cada columna del mismo modelo dtm. Luego en
la programación se desea crear una nueva columna con su nombre de columna y
sus datos y esto se logra escribiendo:
String[] newColumn= {"Flan","Pastel","Helado","Barquillo","Manzana" };
dtm.addColumn("Postre",newColumn);
btnBuscar
btnVer
btnCerrar
txtCodFac
txtNombre
btnNuevo
btnEliminar
btnModificar
btnGrabar
btnCancelar
tablaFacultad
Con el método addRow logramos crear una fila con los datos del vector
datos en el objeto dtm y como está vinculado a la tablaFacultad entonces se
podrá ver los registros agregados.
Tenemos el JmenuBar que permite iniciar el diseño del menú, Se crea por defecto
un objeto Jmenu que permitirá a partir de este crear las opciones, las cuales se
crearán con los objetos JmenuItem.
No es mi intención detallar las distintas clases que tenemos para usar en el diseño
de un menú, pero si deseas conocer más sobre los Swing Menus, pueden revisar
las sesiones 10 y 11 del curso de Programación Visual I.
txtCodEsc
btnBuscar
btnVer
btnCerrar
txtNom
cboFac
btnNuevo
btnEliminar
btnModificar
btnGrabar
btnCancelar
tablaEscuela
4. Vamos a utilizar una vista para mostrar los datos de la tabla de Escuela en el
objeto JTable. Estando en la ficha de Prestaciones en la carpeta Vistas
damos clic botón derecho con el mouse y seleccionamos Crear Vista.
b. Definir los atributos o variables a usar en los distintos métodos que forma
la clase frmMantEscuela.
Procedimientos almacenados
Poco a poco las empresas y muchas personas en general empiezan a mirar más
hacia el Software Libre y se dan cuenta que existen excelentes alternativas a
distintos programas que para ellos son de uso frecuente en otro Sistema Operativo,
como pueden ser OpenOffice, Mozilla Firefox, Eclipse, NetBeans, PostgreSQL,
PHP y MySQL por citar algunos, en esta nota hablaré un poco del Manejador de
Bases de datos MySQL, que en los últimos años ha tenido grandes avances en su
desarrollo y actualmente es uno de los DBMS más usados en sitios web y que en
sus últimas versiones ha incorporado nuevas características como la
implementación de las tablas, disparadores, funciones y procedimientos
almacenados. Los procedimientos almacenados son de gran utilidad para realizar
tareas frecuentes en una base de datos, es sorprendente la cantidad de tiempo que
Interface PreparedStatement
Este componente permitirá hacer uso de los procedimientos almacenados. Una vez
instanciado el objeto usaremos el método preparedStatement para invocar el uso
de un procedimiento almacenado. También se hará uso de los métodos setString(),
setInt(), setDate(), etc para indicar la posición del parámetro y el valor de dicho
parámetro. Finalmente usaremos el método executeUpdate() para ejecutar el
procedimiento almacenado.
7. Vamos a proceder a crear una vista para mostrar los datos del plan de estudios.
Estando en la ficha de Prestaciones y en la conexión de universidad
seleccionamos la carpeta Vistas y damos clic botón derecho del mouse.
txtNroPlan
btnBuscar
btnVer
btnCerrar
cboEsc
cboCur
txtCiclo
txtHorasT
txtHorasP
txtHorasL
txtNroCre
btnNuevo
btnEliminar
btnModificar
btnGrabar
btnCancelar
Se prepara los títulos del objeto tablaPlan en el vector títulos, se vincula los
modelos de datos a los objetos tablaPlan, cboEsc y cboCur. Luego se llena los
nombres de las escuelas profesionales en la lista desplegable cboEsc y de igual
modo se hace con la lista desplegable cboCur. También se llena de datos en el
objeto tablaPlan.
4. Método que se usa para establecer la conexión con la base de datos a través del
interface Connection, se denomina ___________________
CAPITULO III
CONSULTA DE DATOS
Se debe notar en los ejemplos anteriores que las filas regresadas son mostradas
sin ningún orden en particular. Sin embargo, frecuentemente es más fácil examinar
la salida de una consulta cuando las filas son ordenadas en alguna forma útil. Para
ordenar los resultados, tenemos que usar una cláusula ORDER BY.
Select e.nombre from escuela e, facultad f where e.idfacultad=f.idfacultad
And f.nombre=”Ingenieria” order by e.nombre;
Podemos ordenar múltiples columnas. Por ejemplo, para ordenar por ciclo de los
planes de estudio y por el número de créditos, el cual se ordenará de forma
descendente, usaremos la siguiente consulta:
Select ciclo,c.nombre, horasteoricas, horaspractica, horaslaboratorio, nrocreditos
from Plan_estudios p, curso c, escuela e where p.idcurso=c.idcurso and
p.idescuela=e.idescuela and e.nombre=”Ingenieria de Sistemas”
order by ciclo, nrocreditos desc;
Seleccionamos Plan de Estudio por Escuela damos clic botón derecho del
mouse elegimos Eventos/Action/ActionPerformed
cboEscuela
btnConsultar
tablaPlanes
btnCerrar
Se define las variables objeto conn, st, rs del tipo Connection, Statement y
ResultSet inicializando como null. La variable objeto dtm es del tipo
DefaultTableModel para el manejo del objeto Jtable tablaPlanes.
Con la variable arreglo llamado titulos de tipo String, almacenamos los títulos
de cada uno de las columnas. Con el método setColumnIdentifiers() damos el
arreglo titulos para establecer los titulos de cada columna que maneja el
modelo dtm. Con el método setmodel() vinculamos el modelo al objeto Jtable
tablaPlanes. En el bloque try iniciamos con establecer la conexión con la base
de datos universidad. Una vez que se tienen la conexión procedemos a ejecutar
el método EnlEsc() que se encuentra en la clase Acceso que permitirá obtener
todos las escuelas profesionales. Con el método next() se ubica al primer
registro de los resultados devueltos por el método EnlEsc(), de ahí cada vez
que usemos el método next() se desplazará al siguiente registro. Cuando el
método next() devuelva falso terminará la ejecución de la sentencia repetitiva
while. En cada desplazamiento se agregará al objeto JComboBox denominado
cboEscuela el nombre de la escuela profesional.
Cuando trabajamos con una base de datos es posible que haya sentencias SQL
que tengamos que ejecutar varias veces durante la sesión, aunque sea con
distintos parámetros. Por ejemplo, durante una sesión con base de datos podemos
querer insertar varios registros en una tabla. Cada vez los datos que insertamos
serán distintos, pero la sentencia SQL será la misma: Un INSERT sobre
determinada tabla que será siempre igual, salvo los valores concretos que
queramos insertar.
Casi todas las bases de datos tienen previsto un mecanismo para que en estos
casos la ejecución de esas sentencias repetidas sea más rápida. Si tenemos una
tabla person con un id, una edad, un nombre, un apellido y hacemos, por ejemplo,
varios INSERT así
mysql> INSERT INTO person VALUES (null, 23, 'Pedro', 'Perez');
mysql> INSERT INTO person VALUES (null, 33, 'Rodrigo', 'Rodriquez');
en cada caso la base de datos deberá analizar la sentencia SQL, comprobar que es
correcta, convertir los datos al tipo adecuado (por ejemplo, los enteros a int) y
ejecutar la sentencia.
El mecanismo que preven las bases de datos para hacer más eficiente este
proceso es que le indiquemos, previamente, el tipo de sentencia que vamos a usar,
de forma que la base de datos la "precompila" y la guarda en condiciones de ser
ejecutada inmediatamente, sin necesidad de analizarla en cada caso. Esto es lo
que se conoce como una prepared statement. En el caso de mysql, se haría de
esta forma
mysql> PREPARE insertar FROM "INSERT INTO person VALUES (null, ?, ?, ?)";
mysql> SET @edad=23;
mysql> SET @nombre='Pedro';
mysql> SET @apellido='Perez';
mysql> EXECUTE insertar USING @edad,@nombre,@apellido
mysql> SET @edad=33;
mysql> SET @nombre='Rodrigo';
mysql> SET @apellido='Rodriguez';
mysql> EXECUTE insertar USING @edad,@nombre,@apellido;
mysql> DEALLOCATE PREPARE insertar;
donde hemos preparado una prepared statement de nombre insertar con la SQL del
INSERT, en la que hemos reemplazado los valores concretos por interrogantes.
Fíjate que no hemos puesto comillas entre los interrogantes. Hemos hecho dos
Uniones
Desde MySQL es posible realizar una consulta que devuelva los valores de una
tabla que está relacionada con otras de una sola vez.
Por ejemplo, tenemos una tabla principal bien normalizada, con muchos campos
que están relacionados mediante un id con otras tablas que contienen los valores
reales.
Lo que necesitamos hacer es convertir esa tabla principal en otra en que los IDs se
conviertan en dichos valores reales, y para ello utilizaremos JOINs:
Para los ejemplos, necesitamos crear y llenar tres tablas. La primera es un catálogo
de las reglas gramaticales para los acentos:
CREATE TABLE regla (
idRegla VARCHAR(1) DEFAULT '' PRIMARY KEY,
nombre VARCHAR(20) DEFAULT '' NOT NULL,
descripcion VARCHAR(250) DEFAULT '' NOT NULL
);
Si seleccionamos todas las palabras que no tiene una regla gramatical tenemos 3
filas.
SELECT *
FROM palabra
WHERE idRegla IS NULL;
NATURAL JOIN
Así que podemos reescribir las consultas anteriores usando la sintaixs del NATURAL
JOIN.
-- 15 rows (sólo palabras con regla)
SELECT p.cadena, r.nombre
FROM palabra AS p
NATURAL JOIN regla AS r;
Subconsultas
Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia
SELECT. Normalmente se utilizan para filtrar una clausula WHERE o HAVING con
el conjunto de resultados de la subconsulta, aunque también pueden utilizarse en la
lista de selección.
SELECT CO_EMPLEADO,
NOMBRE,
(SELECT MIN(FECHA_NOMINA)
FROM NOMINAS
WHERE CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO)
PRIMERA_NOMINA
FROM EMPLEADOS;
En lugar de:
En lugar de:
SELECT * FROM t1
WHERE EXISTS (SELECT * FROM t2 WHERE t2.column1=t1.column1
AND t2.column2=t1.column2);
Aplicación
Vamos a proceder a crear una consulta que permita visualizar los palanes de
estudios de una escuela profesional y de un ciclo específico usando uniones y
subconsultas para calcular el total de créditos.
1. En la clase Acceso agregamos el siguiente método BuscaPlanesEscuelaCiclo.
Seleccionamos Plan de Estudio por Escuela damos clic botón derecho del
mouse elegimos Eventos/Action/ActionPerformed
btnCerrar
lblCreditos
Se define las variables objeto conn, st, rs del tipo Connection, Statement y
ResultSet inicializando como null. La variable objeto dtm es del tipo
DefaultTableModel para el manejo del objeto Jtable tablaPlanes
Con la variable arreglo llamado titulos de tipo String, almacenamos los títulos
de cada uno de las columnas. Con el método setColumnIdentifiers() damos el
arreglo titulos para establecer los titulos de cada columna que maneja el
modelo dtm. Con el método setmodel() vinculamos el modelo al objeto JTable
tablaPlanes. En el bloque try iniciamos con establecer la conexión con la base
de datos universidad. Una vez que se tienen la conexión procedemos a ejecutar
el método EnlEsc() que se encuentra en la clase Acceso que permitirá obtener
todos las escuelas profesionales. Con el método next() se ubica al primer
registro de los resultados devueltos por el método EnlEsc(), de ahí cada vez
que usemos el método next() se desplazará al siguiente registro. Cuando el
método next() devuelva falso terminará la ejecución de la sentencia repetitiva
while. En cada desplazamiento se agregará al objeto JComboBox denominado
cboEscuela el nombre de la escuela profesional.
3. El objeto JTabbedPanel permite usar un diseño fácil para interactuar con varias
pestañas (llamadas también persianas, páginas, etc.). Vamos ir conociendo o
recordando el uso de este objeto que lo utilizaremos en el diseño de la
Luego selecciona el objeto JTabbedPanel y dando clic botón derecho del mouse
se agrega un objeto JPanel que permitirá crear la primera pestaña.
cboDocente
txtSemestre
btnConsultar
tablaCargaDocente
btnCerrar
lblHorasAsig
cboEscuela
txtSemes
btnMostrar
tablaCargaEscuela
btnSalir
Se define las variables objeto conn, st, rs del tipo Connection, Statement y
ResultSet inicializando como null. Las variables objeto dtmCargaDoc y
dtmCargaEsc es del tipo DefaultTableModel para el manejo de los objetos
Jtable tablaCargaDocente y tablaCargaEscuela. Se crea una matriz para el
manejo de los apellidos y nombres de los docentes.
Agregamos en la clase Acceso el método EnlDoc para obtener los apellidos y
nombres de los docentes.
AUTOEVALUACION
4. Paquete que permite trabajar con aplicaciones con base de datos, se denomina-
__________________
5. Método que permite desplazarse dentro del cursor ResultSet registro por registro,
se denomina __________________
1. Construye una aplicación que permita consultar los cursos pertenecientes a una
área específica. Usa la base de datos de universidad.
2. De acuerdo a la aplicación desarrollada en el presente capítulo, cambia la lista
desplegable de escuela profesional y la lista desplegable del ciclo académico por
una caja de Lista y en cuadro de texto respectivamente. Cambiar la programación
que sea necesaria y luego ejecutar la aplicación.
3. A la aplicación desarrollada en la parte 2 donde se mostraba los planes de
estudios luego de seleccionar la escuela profesional e indicar el ciclo, usa un
procedimiento almacenado que siga haciendo la misma consulta
CAPITULO IV
REPORTE Y DESARROLLO DE UN SISTEMA
IReport
Ahora agrega el archivo jar a través del botón de comando Add JAR
4. Debemos tener un proyecto abierto o creamos otro para hacer uso del IReport.
Si tuviéramos un proyecto llamado Reportes, nos ubicamos en el paquete
Reportes y dando clic botón derecho del mouse procedemos a buscar la opción
EmptyReport. Luego de seleccionar EmptyReport, dar clic en el botón de
comando Siguiente e indicamos el nombre de reporte a diseñar. Finalmente dar
clic en el botón de comando Terminar. El entorno de NetBeans se verá el
entorno de IReport.
Solicitará indicar el password y luego dar clic en el botón de comando OK. Debe
salir un mensaje de conexión satisfactoria.
Usando objetos Static Text coloca los títulos para cada uno de los campos.
Usando los campos que se muestran en la vista Report Inspector arrastra los
campos a la zona de Detail del diseño colocando debajo del título.
JasperReports
1. Selecciona el paquete universidad, al dar clic con el botón derecho del mouse,
selecciona Nuevo/Clase Java.
Importamos los paquetes sql para manejo de base de datos, el paquete swing
que a través de la clase JOptionPane para visualizar mensajes, el paquete util
para manejar los parámetros. Los paquetes net.sf.jasperreports para el manejo
de las clases: JasperFillManager para llenar o administrar los datos
provenientes de la base de datos, JasperPrint para lograr la impresión del
reporte y la clase JasperViewer para la visualización del reporte antes de la
impresión.
Seleccionar las tablas plan_estudios, curso y escuela y elegir con un check los
campos.
Dar clic en el botón de comando OK. Por última vez agregamos otra
condición desde la claúsula WHERE. Indicamos que el código de escuela
profesional de la tabla plan_estudios es igual al parámetro codescuela.
Seleccionar la opción Use the same connection used to fill the master report y
luego dar clic en el botón de comando Siguiente.
DESARROLLO DE UN SISTEMA
La Empresa Reyser Ingenieros SRL, inició sus servicios en 1993 con trabajos de
mantenimientos varios en plantas industriales y servicios de saneamiento de agua y
alcantarillado, y durante el año de 1995 ampliaron sus servicios con Hidrandina
S.A. en trabajos comerciales y de control de pérdidas. En el año 2001 Reyser
Ingenieros SRL, obtiene su registro de Consucode y empieza la ejecución de obras
eléctricas y de construcción civil, por lo que para optimizar la calidad de su servicio
establece una alianza estratégica con Sesga Contratistas SAC, con la que atienden
con éxito reconocido a sus clientes; ejecutando servicios de actividades
comerciales con Hidrandina S.A. en Cajamarca, Chepén, Pacasmayo, Paiján y
Control de Pérdidas en Trujillo. El personal profesional y técnico con el que cuenta
el Consorcio inició sus labores con Reyser Ingenieros SRL y fue la base para que
Sesga Contratistas tenga éxito en el servicio a sus clientes; para que en la
Como “Consorcio Sesga – Reyser” viene prestando con reconocido éxito servicios
de actividades comerciales y de distribución a Hidrandina S.A. en Cajamarca,
Chimbote, La Libertad Norte y La Libertad.
Su labor está enmarcada con responsabilidad social, cuyos esfuerzos los orienta
en el fortalecimiento institucional que contribuye al desarrollo del capital humano,
conservación de la calidad del servicio y defensa de los intereses de sus clientes a
través de la satisfacción de sus demandas y solución de problemas sean regionales
o nacionales; con estándares de calidad y las mejoras prácticas administrativas,
concordantes con las exigencias del mundo globalizado.
La visión del Consorcio es ser reconocida como una empresa líder, por la
certificación de sus procesos y la garantía de brindar un servicio de excelencia a
sus clientes, en el desarrollo sostenible de la Región.
DATOS:
PROCESO DE LA INFORMACION:
Tabla: Actividades
Tabla: Cliente
Tabla: Medida
Tabla: Recursos
Tabla: Medidor
Tabla: Marca
Tabla: Ficha
Tabla: DetalleMedidor
Tabla: DetalleActividades
Tabla: DetalleRecursos
Diseño de Interfaces
Pantalla Principal
Mantenimiento de Marca
Mantenimiento de Medidor
Mantenimiento de Medidas
Mantenimiento de Actividades
Mantenimiento de Recursos
Registro de Fichas
AUTOEVALUACION
2. Para diseñar reportes en Java se hace uso de del IReport (verdadero o falso)
_______________________
1. Diseña el reporte indicado en el presente capítulo y luego haz lo mismo con otra
tabla de la base de datos universidad.
2. Usando las tablas de la base de datos diseña y ejecuta un reporte usando
subreportes. La aplicación debe ser diferente al ejemplo usado en el presente
capítulo.
REFERENCIAS BIBLIOGRAFICAS
• Harvey M. Deitel y Paul J.Deitel Cómo programar en Java.Pearson Educación, 5da
edición, 1268p, 2004
• Página oficial de NetBeans. Utilizando el entonr NetBeans
http://wiki.netbeans.org/SpanishTranslationTutorialesAPIPersistenciaVWP
• Página oficial de MySql Descargando el conector para MySql
http://dev.mysql.com/downloads/connector/j/5.0.html
• Ejemplo básico de programación con JDBC y MySql.[19 Noviembre del 2007]
http://casidiablo.net/ejemplo-basico-de-programacion-con-jdbc-y-mysql/
• Sherekan. JDBC y MySql. [27 Agosto del 2008]
http://www.clubdesarrolladores.com/articulos/mostrar/61-jdbc-y-mysql
• Youtube. Instalación de Ireport para NetBenas 6.9 [Abril 2010]
http://www.youtube.com/watch?v=wKimVA6fOBA