Está en la página 1de 71

UNASAM Ingeniería de Sistemas e Informática

SESION 30
I. EL PAQUETE SQL DE JAVA Y SUS CLASES
1. JDBC - JAVA DATABASE CONNECTIVITY,
Forma parte de un conjunto de clases e interfaces java que permiten acceder genéricamente
a las Bases de datos (BDs) independientes del proveedor; ejecuta operaciones
sobre ellas desde el lenguaje de programación Java, independientemente del sistema
operativo o de la BD, utilizando SQL del modelo de BD.
Gracias a JDBC, un programa Java puede acceder a cualquier BD sin necesidad de
modificar la aplicación; sin embargo, para que esto sea posible es necesario que el
fabricante ofrezca un driver que cumpla la especificación JDBC.
Capa de software intermedia que traduce las llamadas JDBC a los APIs específicos del
vendedor, ofrece a los desarrolladores Java un modo de crear y conectar a un cliente con
las bases de datos, ejecutar instrucciones SQL y procesar su resultado.
2. Tipos de driver
a. Tipo 1: puente JDBC-ODBC
Traduce operaciones JDBC en llamadas a la API ODBC., estas son cursadas a la base
de datos mediante el driver ODBC apropiado. Esta arquitectura se muestra en la
siguiente figura:

El puente se implementa como el paquete sun.jdbc.odbc y contiene una


biblioteca nativa utilizada para acceder a ODBC.
Ventajas
• Son el primer contacto con un driver JDBC es un puente JDBC-ODBC,
simplemente porque es el driver que se distribuye como parte de Java, como
el paquete sun.jdbc.odbc.JdbcOdbcDriver.
• Puede trabajar con una gran cantidad de drivers ODBC. Los desarrolladores
utilizan ODBC para conectar con bases de datos en un entorno distinto de
Java.
• Útiles en compañías que ya tienen un driver ODBC instalado en las
máquinas clientes basadas en Windows que ejecutan aplicaciones de

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

gestión. Son el único modo de acceder a algunas bases de datos de escritorio,


como MS Access, dBase y Paradox.
• La ausencia de complejidad en la instalación y el acceso virtual a cualquier
base de datos, le convierte en una buena elección.
Desventajas
• Rendimiento: Por el número de capas y traducciones que tienen lugar,
utilizar el puente está lejos de ser la opción más eficaz en términos de
rendimiento.
• El usuario está limitado por la funcionalidad del driver elegido, solo
proporciona acceso a características comunes a todas las bases de datos. No
puede hacer uso de las mejoras que cada fabricante introduce en sus
productos, especialmente en rendimiento y escalabilidad.
• La mayoría de los browser no tienen soporte nativo del puente. Como el
puente es un componente opcional del Java 2 SDK Standard Edition, no se
ofrece con el navegador.
b. Tipo 2: Driver API nativo/parte java
Por ejemplo el driver JDBC/OCI de Oracle, utilizan la interfaz de métodos
nativos de Java para convertir las solicitudes de API JDBC en llamadas
específicas a bases de datos para RDBMS como SQL Server, Informix, Oracle
o Sybase.

Aunque habitualmente ofrecen mejor rendimiento que el puente JDBC-ODBC,


tiene los mismos problemas de despliegue en los que la interfaz de conectividad
nativa debe estar instalada en la máquina cliente. El driver JDBC necesita una
biblioteca suministrada por el fabricante para traducir las funciones JDBC en
lenguaje de consulta específico para ese servidor. Estos drivers están escritos en
Java y C/C++, el driver debe utilizar una capa de C para realizar llamadas a la
biblioteca escrita en C.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Ventajas
• Ofrece un rendimiento significativamente mayor que el puente JDBC-
ODBC, las llamadas JDBC no se convierten en llamadas ODBC, sino que
son nativas.
Desventajas
• La biblioteca de la base de datos del fabricante necesita iniciarse en cada
máquina cliente. En consecuencia, los drivers de tipo 2 no se pueden utilizar
en Internet.
• Utiliza la interfaz nativa de Java, que no está implementada de forma
consistente entre los distintos fabricantes de JVM por lo que no es muy
portable entre plataformas.
c. Tipo 3: Driver protocolo de red/ todo java
Están implementados en una aproximación de tres capas por lo que las
solicitudes de la base de datos JDBC están traducidas en un protocolo de red
independiente de la base de datos y dirigidas al servidor de capa intermedia. El
cual recibe las solicitudes y las envía a la base de datos utilizando un driver
JDBC del tipo 1 o del tipo 2 (lo que significa que se trata de una arquitectura
muy flexible).
La arquitectura en conjunto consiste en tres capas: la capa cliente JDBC y driver,
la capa intermedia y la base o las bases de datos a las que se accede.

El driver JDBC se ejecuta en el cliente e implementa la lógica para enviar a


través de la red comandos SQL al servidor JDBC, recibir las respuestas y
manejar la conexión.
El servidor intermedio puede implementarse como un componente nativo, o
escrito en Java. Las implementaciones nativas conectan con la base de datos
utilizando una biblioteca cliente del fabricante o un ODBC. El servidor tiene que
configurarse para la base o bases de datos a las que se va a acceder. Esto puede
implicar asignación de números de puerto, configuración de variables de
entorno, o de cualquier otro parámetro que necesite el servidor. Si el servidor
intermedio está escrito en Java, puede utilizar cualquier driver en conformidad
PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata
UNASAM Ingeniería de Sistemas e Informática

con JDBC para comunicarse con el servidor de bases de datos mediante el


protocolo propietario del fabricante.
Ventajas
• Tiene un componente en el servidor intermedio, no necesita ninguna
biblioteca cliente del fabricante para presentarse en las máquinas clientes.
• Son los que mejor funcionan en redes basadas en Internet o Intranet,
aplicaciones intensivas de datos, en las que un gran número de operaciones
concurrentes como consultas, búsquedas, etc., son previsibles y escalables
y su rendimiento es su principal factor.
• El protocolo de red puede estar diseñado para hacer el driver JDBC cliente
muy pequeño y rápido de iniciar, lo que es perfecto para el despliegue de
aplicaciones de Internet.
• Ofrece soporte para características como almacenamiento en memoria caché
(conexiones, resultados de consultas, etc.), equilibrio de carga, y
administración avanzada de sistemas como el registro.
• Las aplicaciones web de bases de datos basadas en 3 capas implican
seguridad, firewalls y proxis y los drivers del tipo 3 ofrecen normalmente
estas características.
Desventajas
• Requieren código específico de bases de datos para realizarse en la capa
intermedia.
• Además, atravesar el conjunto de registros puede llevar mucho tiempo, ya
que los datos vienen a través del servidor de datos.
d. Tipo 4: Driver protocolo nativo/ todo java
Se comunica directamente con el servidor de bases de datos utilizando el
protocolo nativo del servidor. Estos drivers pueden escribirse totalmente en Java,
son independientes de la plataforma y eliminan todo lo relacionado con la
configuración en el cliente. Sin embargo, es específico de un fabricante. Cuando
la base de datos necesita ser cambiada a un producto de otro fabricante, no se
puede utilizar el mismo driver. Hay que reemplazarlo y también el programa
cliente, o su asignación, para ser capaces de utilizar una cadena de conexión
distinta para iniciar el driver.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Traducen JDBC directamente a protocolo nativo sin utilizar ODBC o la API


nativa, por lo que pueden proporcionar un alto rendimiento de acceso a bases de
datos.

Ventajas
• Como no tienen que traducir las solicitudes de ODBC o de una interfaz de
conectividad nativa, o pasar la solicitud a otro servidor, el rendimiento es
bastante bueno.
• No hay necesidad de instalar ningún software especial en el cliente o en el
servidor; estos drivers pueden bajarse de la forma habitual.
Desventajas
• El usuario necesita un driver distinto para cada base de datos.
3. El paquete Sql
Conjunto de clases que implementan interfaces java y que utilizan métodos de registro para
declarar los tipos de localizadores de una BD (URL), que puedan manejar. Cuando utiliza
una BD en particular, el usuario ejecuta su programa con la biblioteca de conexión
apropiada al modelo de BD y accede a ella estbleciendo su conexión, para hacerlo entrega
el localizador a la BD con parámetros de conexión específicos. Posteriormente realiza
cualquier tipo de tarea con la BD a la que tiene permiso: consulta, actualización, creación,
modificación y borrado de tablas o ejecuta procedimientos almacenados en la BD, entre
otras actividades.
Implementado por la API (Intrefaz de Programación de Aplicaciones) de JDBC, es una
paquetería importada por java para hace consultas en una base de datos. Contiene su propia
estructura y hace llamado a sus propias clases. Permite acceder y procesar a datos
almacenados en una fuente de datos como una base de datos relacional, utilizando el
lenguaje de programación Java, incluye un marco para instalar diferentes controladores de
forma dinámica y asi acceder a diferentes fuentes de datos.
Aunque está orientada principalmente a pasar sentencias SQL a una base de datos, permite
leer y escribir datos desde cualquier fuente de datos con formato tabular.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

4. Operaciones con JDBC para la conexión


a. Cargar un driver de base de datos y abrir conexiones
La interfaz java.sql.Connection representa una conexión con una BD.
Es una interfaz porque la implementación de una conexión depende de la
red, del protocolo y del vendedor. JDBC utiliza la
clase java.sql.DriverManager adecuada para acceder a bases de datos
desde programas escritos en Java.
El estándar para obtener conexiones es registrar cada driver
con java.sql.DriverManager y utilizar sus métodos para obtener
conexiones, esta clase puede gestionar múltiples drivers.
Cada driver implementa la interfaz java.sql.Driver, uno de los métodos
de esta interfaz, el método connect() permite establecer una conexión con
la BD y obtener un objeto Connection.

Los URL de JDBC


Proporcionan un modo de identificar un driver de BD, representa un driver
y la información necesaria para localizarla y conectarse a ella. Su sintaxis
es la siguiente:
jdbc:<subprotocol>:<subname>
Existen tres partes separadas por dos puntos:
• Protocolo: jdbc es el protocolo, es el único protocolo que permite JDBC.
• Subprotocolo: Utilizado para identificar el driver que utiliza la API
JDBC para acceder al servidor de bases de datos, su nombre depende de
cada fabricante.
• Subnombre: La sintaxis del subnombre es específica del driver.
Por ejemplo, si queremos conectarnos y acceder a la base de datos
bdVentas creada
con Mysql, la sintaxis es la siguiente.
jdbc:mysql: bdVentas
En oracle seria
jdbc: odbc: bdVentas
Como se observa, los URL de JDBC son lo suficientemente flexibles como
para especificar información específica del driver en el subnombre.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Clase DriverManager
Proporciona una capa de acceso común encima de diferentes drivers de base
de datos utilizados en una aplicación. Las aplicaciones utilizan esta
clase para obtener conexiones, ofrece tres métodos estáticos para obtener
conexiones.
Requiere que cada driver que necesite la aplicación se registre antes de su
uso, de modo que el DriverManager lo ubique.
Con esta clase en una aplicación, se puede obtener una o más conexiones
para una o más bases de datos utilizando drivers JDBC.
El siguiente fragmento de código carga el driver de base de datos de
MySQL:
try {
Class.forName(“com.mysql.jdbc.Driver”);
} catch (ClassNotFoundException e) {
// Driver no encontrado
}
En tiempo de ejecución, el ClassLoader localiza y carga la clase
com.mysql.jdbc.Driver desde la ruta de clases utilizando el cargador de
clase de autoarranque.
En JDBC, se requiere que cada proveedor de driver registre una instancia
del driver con la clase java.sql.DriverManager durante esta inicialización
estática. Este registro tiene lugar automáticamente cuando el usuario carga
la clase del driver (utilizando la llamada Class.forName()).
Una vez que el driver se registra con java.sql.DriverManager, podemos
utilizar sus métodos estáticos para obtener conexiones.
El gestor de drivers tiene tres variantes del método
estático getConnection() utilizado para establecer conexiones, delega estas
llamadas al método connect() de la interfaz java.sql.Driver.
Dependiendo del tipo de Driver y del servidor de base de datos, la conexión
puede llevar una conexión física de red al servidor de BD o una conexión
física de proxy. Exista o no conexión física, el objeto conexión es el único
para conectar con la BD.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

b. Establecer una conexión

Para comunicarse con una BD mediante JDBC, en primer lugar hay que
establecer una conexión con la BD a través del driver JDBC apropiado. El
API JDBC especifica la conexión en la interfaz java.sql.Connection.
El siguiente código muestra un ejemplo de conexión JDBC a una base de
datos MySQL:
Connection connection;
String url = “jdbc:mysql:BDVentas”;
String login = “root”;
String password = “Miclave”
try {
connection=DriverManager.getConnection(url,login,
password);
// Acceso a datos utilizando el objeto de conexión
...
} catch (SQLException sqle) {
// Tratar el error aquí
} finally {
try {
connection.close();
} catch (SQLException e) {
// Tratar el error aquí
}
}
En este ejemplo, la clase DriverManager intenta establecer conexión con la
base de datos, BDVentas utilizando el driver JDBC que proporciona
MySQL. Para poder acceder al RDBMS MySQL es necesario introducir
un login y un password válidos.
En el API JDBC, hay varios métodos que pueden lanzar la
excepción SQLException.
En este ejemplo, la conexión se cierra al final del bloque finally, de modo
que los recursos del sistema puedan ser liberados independientemente del
éxito o fracaso de cualquier operación de base de datos.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

c. Carear y ejecutar instrucciones


Antes de poder ejecutar una sentencia SQL, es necesario obtener un objeto
de tipo Statement. Creado dicho objeto, podrá ser utilizado para ejecutar
cualquier operación contra la base de datos.
Statement
Es una clase del paquete sql utilizada para enviar sentencias SQL a una base
de datos. Hay tres tipos de objetos Statement, que actúan como
contenedores para la ejecución de sentencias en una conexión dada:
Statement, PreparedStatement que hereda de Statement y CallableStatement
que hereda de PreparedStatement. Especializadas para enviar tipos
particulares de sentencias SQL.
Un objeto Statement se usa para ejecutar una sentencia SQL simple sin
parámetros. Un objeto PreparedStatement se usa para ejecutar sentencias
SQL pre compiladas con o sin parámetros IN; y un objeto CallableStatement
se usa para ejecutar un procedimiento de base de datos almacenado.
El siguiente método crea un objeto Statement, que podemos utilizar para
enviar instrucciones SQL a la base de datos. Statement createStatement()
throws SQLException
La finalidad de un objeto Statement es ejecutar una instrucción SQL que
puede o no devolver resultados. Para ello, la interfaz Statement dispone de
los siguientes métodos:
executeQuery(), para sentencias SQL que recuperen datos de un único
objeto ResultSet.
executeUpdate(), para realizar actualizaciones que no devuelvan un
ResultSet. Por ejemplo, sentencias DML SQL (Data Manipulation
Language) como INSERT, UPDATE y DELETE, o sentencias DDL SQL
(Data Definition Language) como CREATE TABLE, DROP
TABLE y ALTER TABLE. El valor que devuelve executeUpdate() es un
entero (conocido como la cantidad de actualizaciones) que indica el número
de filas que se vieron afectadas.
Resultset
Contiene todas las filas que satisfacen las condiciones de una sentencia SQL
y proporciona el acceso a los datos de estas filas mediante un conjunto de

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

métodos get que permiten el acceso a las diferentes columnas de la filas. El


método next se usa para moverse a la siguiente fila del result set,
convirtiendo a ésta en la fila actual.
Un ResultSet es una tabla, pero no hay garantía de que los datos lleguen en
orden, por lo que se puede usar la sentencia ORDER BY para asignar un
determinado orden establecido en las filas del ResultSet.
El formato general de un resultset es una tabla con cabeceras de columna y
los valores correspondientes devueltos por la ‘query’. Por ejemplo, si la
‘query’ es SELECT a, b, c FROM Table1, el resultado tendrá una forma
semejante a :
a b c
-------- --------- --------
12345 Cupertino CA
83472 Redmond WA
83492 Boston MA

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

SESION 31
I. Cargar el driver de mysql a un proyecto Java
Para cumplir con estge paso, luego de haber creado un proyecto nos dirigimos a las librerias
Librarias, del proyecto y dando anticlick seleccionamos el item Adicionar librerias para que se
nos cargue el dialogo AddLibrary.

En este dialogo se tiene que seleccionar el driver MySQL JDBC Driver y presionamos el boton
Add Library.

Cuando se diciona se muestra el driver adicionado como parte de las librerias del proyecto, tal
como se muestra a continuación.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

II. Crear la clase conexión


Después de cargar el driver con las librerias de mysql, el siguiente paso es crear la clase que nos
permita gestionar la coexión de una base de datos con el proyecto o aplicación java, tal como se
uestra a continuación.

Como se muestra es recomendable crear la clase en un paquete cuyo nombre puede ser clases, el
codigo de la misma se muestra a continuación.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

En la clase anterior el paquete que contiene las clases para trabajar con las bases de datos es
java.sql, que contienen las clases DriverManager, Connection, Statement y Resultset, entre otras.
Se definen sus atributos, que son instancias a las clases que permiten el manejo de la base de datos
y para las credenciales, como conec, st, rt y usu, contraaseña, host, entre otros.
En cuanto a los métodos se implementan el metodo Conectar, de ambito publico, utiliza el bloque
try – catch, para capturar las excepciones que se generan al trabajar con base de datos, asignamos
valores a las credenciales, nombre de usuario, servidor o host, contraseña y nombre de la base de
datos con la que deseamos conectarnos, la misma que debe estar ya implementada en el DBMS,
en este caso Mysql.
En el resto del código, se genera la url de conexión.
String url="jdbc:mysql://"+host+"/"+db;
Cargamos el driver al proyecto.
Class.forName("com.mysql.jdbc.Driver").newInstance();
Obtenemos la conexión a la base de datos con las credenciales indicadas.
conec=DriverManager.getConnection(url, usu, contraseña);

El otro metodo que esta implemetado en esta clase es el método constructor que tiene el mismo
nombre de la clase, donde lo unico que se hace es llamar al método Conectar, como se muestra
en la implementación de la clase Conexión.

III. Métodos para trabajar con base de datos en diferentes controles de java.
Para poder trabajar con la base de datos de una manera modularizada y aprovechando las ventajas
de la POO, recomiendo como estrategia crear una clase a la cual le llamo Controlador donde se
implementan métodos generales que nos permitan por ejemplo crear, modificar o eliminar
registros de una base de datos, llenar un JComboBox con datos de una base de datos, entre otros
métodos como se muestra a continuación.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

En la clase controlador se implemento los métodos que permiten llenar un combo con un dato, que
se genera con una consulta del tipo select y tomamos los valores de uno de los campos, que se
quiere mostrar en este control, para lo cual primero limpiamos el combo, nos conexctamos a la BD,
mediante el objeto Base que es una instancia de la clase Conexión, hacemos la consulta que llega
como argumento, se crea la sentencia y se ejecuta, el resultado se almacena en el objeto, rt que es
una instancia de ResulSet, luego recorremos los registros mediante el método next de rt, capturamos
el dato, usando el método getString(pos) y lo adicionamos al combo, mediante su método addItem,
al final mediante el método, SetSelectedIndex(-1), le indicamos que no seleccione ningún item del
combo; igual para los demas métodos se trabaja con las clases del paquete java.sql.

IV. Acceso al sistema


Para acceder al sistema se crea una ventana que permita ingresar las credenciales de los usuarios
del ssitema, como se muestra a continuación.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

El codigo es el siguiente:
package ventanasjframe;
/**
*
* @author Msc. Ing. Miguel Angel Silva Zapata
*/
import java.awt.*;import java.awt.event.*;
import javax.swing.*;import Clases.*;
public class Acceso extends JFrame{
Controlador control=new Controlador();
public Acceso(){
ConfiguraVentana();
}
public void ConfiguraVentana(){
this.setTitle("Acceso al Sistema");this.getContentPane().setBackground(Color.WHITE);
this.setSize(285,235);this.setLocationRelativeTo(null);this.setLayout(null);
this.setResizable(false);this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setIconImage(new ImageIcon(getClass().getResource("/Imagenes/reporte.png")).getImage());
JLabel lb=new JLabel("Bienvenidos al Sistema");
lb.setForeground(Color.blue);lb.setBounds(65, 5, 150, 25);
JLabel lbus=new JLabel("Usuario: ");
lbus.setForeground(Color.blue);lbus.setBounds(15, 45, 150, 25);
JTextField txusu=new JTextField();txusu.setForeground(Color.GREEN);txusu.setBounds(105, 45, 150, 25);
JLabel lbpsw=new JLabel("Password: ");
lbpsw.setForeground(Color.blue);lbpsw.setBounds(15, 95, 150, 25);
JPasswordField pswf=new JPasswordField();pswf.setForeground(Color.GREEN);pswf.setBounds(105, 95, 150,
25);
JButton btAceptar=new JButton("Aceptar");btAceptar.setMnemonic('A');
btAceptar.setForeground(Color.red);btAceptar.setBounds(15,150, 110,35);
btAceptar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/aceptar.png")));
btAceptar.setBackground(Color.YELLOW);

JButton btSalir=new JButton("Salir");btSalir.setMnemonic('s');


btSalir.setForeground(Color.red);btSalir.setBounds(150,150, 110,35);
btSalir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/exit.png")));
btSalir.setBackground(Color.YELLOW);

add(lb);add(lbus);add(lbpsw);add(txusu);add(pswf);add(btAceptar);add(btSalir);

pswf.addKeyListener(new KeyListener() {
@Override public void keyTyped(KeyEvent e) {
if(e.getKeyChar()==10) btAceptar.doClick();
}
@Override public void keyPressed(KeyEvent e) {}
@Override public void keyReleased(KeyEvent e) {}
});
btAceptar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Acceder(txusu,pswf);
}
});
btSalir.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
}

public void Acceder(JTextField tx,JPasswordField pw){


if(tx.getText().trim().length()==0){
JOptionPane.showMessageDialog(null, "Ingresa el Nombre del Usuario");
tx.grabFocus();

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

}
else{
if(pw.getText().trim().length()==0){
JOptionPane.showMessageDialog(null, "Ingresa la clave del Usuario");
pw.grabFocus();
}
else{
if(control.Verificarconsulta("select * from usuario where nomus='"+tx.getText()
+"' and psw='"+pw.getText()+"'")){
new FrmJDesktop().setVisible(true);
this.dispose();
}
else{
JOptionPane.showMessageDialog(null, "Credenciales Incorrectas");
Textos.MarcarTexto(pw);
}
}
}
}
public static void main(String[] args) {
new Acceso().setVisible(true);
}
}
*) Si las credenciales son correctas entonces accede al menú principal de la aplicación.

Así también para la implementación del acceso al sistema se tiene que crear la tabla usuario en la
base de datos del sistema, como se muestra a continuación.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Y como minimo haber ingresado un regsitro.

V. Mostrar y agregar registros a una tabla y mostrarlos en un JCombo de Java.


Habiendo accedido al sistema podemos cargar ventanas desde un menú en el cual se visualice en
un combo u otro control de java los datos de una o varias tablas de las bases de datos, como se
muestra a continuación.

El codigo para mostrar los datos es el siguiente:


case 2:{
ObjVentana.setTitle(" "
+" Mostrar Editoriales en un Combo"); ObjVentana.setLocation(450, 150);
ObjVentana.setSize(750,500);ObjVentana.getContentPane().setLayout(null);
ObjVentana.getContentPane().setBackground(Color.WHITE);JComboBox cbEditoriales=new JComboBox();
JLabel lb= new JLabel("Editoriales");lb.setForeground(Color.blue);lb.setBounds(20,15, 110, 25);
JLabel lbe= new JLabel("Editorial");lbe.setForeground(Color.blue);lbe.setBounds(20,65, 110, 25);
JTextField txedit=new JTextField();txedit.setForeground(Color.red);
txedit.setBounds(100,65, 160, 25);cbEditoriales.setBounds(100,15, 160, 25);
control.LlenarCombo(cbEditoriales,"select * from editorial", 2);
ObjVentana.add(lb);ObjVentana.add(lbe);ObjVentana.add(cbEditoriales);
ObjVentana.add(txedit);
txedit.addKeyListener(new KeyListener() {
@Override public void keyTyped(KeyEvent e) {
if((e.getKeyChar()==10)&&(txedit.getText().trim().length()>0)){
if(!control.Verificarconsulta("select * from editorial where nomedit='"+txedit.getText().trim()+"'")){
control.ActualizarRegistro("insert into Editorial(nomedit) values('"+txedit.getText().trim()+"');");
control.LlenarCombo(cbEditoriales,"select * from editorial", 2);
cbEditoriales.setPopupVisible(true);txedit.setText(null);txedit.grabFocus();
}
else
Textos.MarcarTexto(txedit);
}
}
@Override public void keyPressed(KeyEvent e) {}

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

@Override public void keyReleased(KeyEvent e) {}


});
El código anterior crea la ventana y muestra los datos de la tabla editorial en el JComboBox, así
tambien mediante el siguiente código se puede ingresar editoriales y se muestran en el
JComboBox.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


CODIGO

/**** @author Miguel Silva****/

import java.awt.*;import java.awt.event.*;

import javax.swing.*;import javax.swing.table.*;

import Clases.*;

public class FrmFacultades extends JFrame{

private JTextField txFacultad;private JLabel lbFacultad;

private JLabel lbBuscar;private JTextField txBuscar;

private JPanel pnlDatos;private JPanel pnlBotones;

private JPanel pneltabla;private JScrollPane PnScrTabla;

private DefaultTableModel mdtabla;private JTable TabFacultades;

private JButton btCrear;private JButton btModificar;private JButton btCancelar;

private JButton btEliminar;private JButton btSalir;

Controlador ctl=new Controlador();

String idFacultad="";

public FrmFacultades(){

ConfiguraVentana();DibujarControles();Oyentes();MostrarFacultades();

public void MostrarFacultades(){

ctl.LlenarJtable(mdtabla,"select * from facultad where nomfac like'%"

+txBuscar.getText()+"%'",2);

public void ConfiguraVentana(){

this.setTitle("Las Facultades");

this.getContentPane().setBackground(new Color(192,201,233));

this.setSize(550,410);this.setLocationRelativeTo(null);this.setLayout(null);

this.setResizable(false);this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setIconImage(new ImageIcon(getClass().getResource("/Imagenes/add.png")).getImage());

}
public void DibujarControles(){

TabFacultades=new JTable();PnScrTabla=new JScrollPane();

mdtabla=new DefaultTableModel();

mdtabla.setColumnIdentifiers(new String[]{"ID","Facultad"});

TabFacultades.setBounds(10,40, 330, 70);TabFacultades.setModel(mdtabla);

lbFacultad=new JLabel("Facultad");lbFacultad.setBounds(15,25,120,25);

txFacultad=new JTextField();txFacultad.setBounds(85, 25,300,25);

lbBuscar=new JLabel("Buscar");lbBuscar.setBounds(15,20,120,25);

txBuscar=new JTextField();txBuscar.setBounds(80,15,400,24);

pnlDatos=new JPanel();pnlDatos.setBounds(0, 0,535, 70);

pnlDatos.setBorder(javax.swing.BorderFactory.createTitledBorder(null,

"Datos", javax.swing.border.TitledBorder.CENTER,

javax.swing.border.TitledBorder.DEFAULT_POSITION,

new java.awt.Font("Times new Roman",1, 12),new java.awt.Color(204,120,102)));

pnlDatos.setLayout(null);pnlDatos.add(lbFacultad);pnlDatos.add(txFacultad);

pneltabla=new JPanel();pneltabla.setBounds(0, 70,535, 230);

pneltabla.setBorder(javax.swing.BorderFactory.createTitledBorder(null

,"Listado de Facultades", javax.swing.border.TitledBorder.CENTER,

javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(

"Times new Roman",1, 12),new java.awt.Color(204,120,102)));

pnlBotones=new JPanel();pnlBotones.setBounds(0, 300,535, 70);

pnlBotones.setBorder(javax.swing.BorderFactory.createTitledBorder(null

,"", javax.swing.border.TitledBorder.CENTER,

javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(

"Times new Roman",1, 12),new java.awt.Color(204,120,102)));

btCrear=new JButton("Crear"); btCrear.setBounds(10, 10,100, 35);

btCrear.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Add.png")));
btCrear.setMnemonic('c');

btModificar=new JButton("Modificar"); btModificar.setBounds(120,10,100, 35);

btModificar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));

btModificar.setMnemonic('m');

btEliminar=new JButton("Eliminar"); btEliminar.setBounds(230,10,100, 35);

btEliminar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));

btEliminar.setMnemonic('e');

btCancelar=new JButton("Cancelar"); btCancelar.setBounds(330,10,100, 35);

btCancelar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));

btCancelar.setMnemonic('c');

btSalir=new JButton("Salir"); btSalir.setBounds(430,10,100, 35);

btSalir.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));

btSalir.setMnemonic('s');

pnlBotones.setLayout(null);pnlBotones.add(btCrear);pnlBotones.add(btModificar);

pnlBotones.add(btEliminar);pnlBotones.add(btCancelar);pnlBotones.add(btSalir);

pneltabla.setLayout(null);PnScrTabla.setBounds(10, 40, 520,170);

PnScrTabla.setViewportView(TabFacultades);pneltabla.add(txBuscar);

pneltabla.add(lbBuscar);pneltabla.add(PnScrTabla);add(pnlDatos);

add(pneltabla);add(pnlBotones);

public void Oyentes(){

btSalir.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

dispose();

});
btCrear.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

if(txFacultad.getText().trim().length()==0){

JOptionPane.showMessageDialog(null, "Faltan Datos");

txFacultad.grabFocus();

else{

if(ctl.VerificaConsulta("select * from facultad where nomfac='"

+txFacultad.getText()+"'")){

JOptionPane.showMessageDialog(null, "La Facultad "+txFacultad.getText()+" Ya Existe");

new ElementoSwing().Marcartxt(txFacultad);

else{

ctl.ActualizarRegistro("insert into facultad(nomfac) values('"

+txFacultad.getText()+"')");txFacultad.setText(null);

MostrarFacultades();

});

btModificar.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

Editar();

});

btEliminar.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

Eliminar();
}

});

txBuscar.addKeyListener(new KeyListener() {

@Override public void keyTyped(KeyEvent e) {}

@Override public void keyPressed(KeyEvent e) {}

@Override

public void keyReleased(KeyEvent e) {

MostrarFacultades();

});

TabFacultades.addMouseListener(new MouseListener() {

@Override

public void mouseClicked(MouseEvent e) {

Seleccionar();

@Override public void mousePressed(MouseEvent e) {}

@Override public void mouseReleased(MouseEvent e) {}

@Override public void mouseEntered(MouseEvent e) {}

@Override public void mouseExited(MouseEvent e) {}

});

public void Seleccionar(){

if(TabFacultades.getSelectedRow()>-1){

idFacultad=TabFacultades.getValueAt(TabFacultades.getSelectedRow(),0).toString();

txFacultad.setText(TabFacultades.getValueAt(TabFacultades.getSelectedRow(),1).toString());

txFacultad.grabFocus();

public void Editar(){

if(idFacultad.trim().length()==0){
JOptionPane.showMessageDialog(null,"Selecciona una facultad");

TabFacultades.grabFocus();

else{

if(txFacultad.getText().length()==0){

JOptionPane.showMessageDialog(null, "Ingrese el nombre de la facultad");

else{

if(ctl.VerificaConsulta("select * from facultad where nomfac='"+txFacultad.getText()

+"' and idFacultad <>'"+idFacultad+"'")){

JOptionPane.showMessageDialog(null,"Cuidado la facultad "+txFacultad.getText()

+" Puede generar una repetición");new ElementoSwing().Marcartxt(txFacultad);

else{

ctl.ActualizarRegistro("update facultad set nomfac='"+txFacultad.getText()

+"' where idFacultad='"+idFacultad+"'");idFacultad="";txFacultad.setText("");

MostrarFacultades();

public void Eliminar(){

if(idFacultad.trim().length()==0){

JOptionPane.showMessageDialog(null,"Debes seleccionar una facultad");

TabFacultades.grabFocus();

else{

if(JOptionPane.showConfirmDialog(null,"Deseas eliminar la facultad","Confirmar",0)==0){

ctl.ActualizarRegistro("delete from facultad where idfacultad='"+idFacultad+"'");

txFacultad.setText(null);idFacultad="";MostrarFacultades();

}
}

public static void main(String[] args) {

new FrmFacultades().setVisible(true);

}
SESION 33
/**** @author Miguel Silva****/

import java.awt.*;import java.awt.event.*;

import javax.swing.*;import javax.swing.table.*;

import Clases.*;

public class FrmFacultades extends JFrame{

private JTextField txFacultad;private JLabel lbFacultad;

private JLabel lbBuscar;private JTextField txBuscar;

private JPanel pnlDatos;private JPanel pnlBotones;

private JPanel pneltabla;private JScrollPane PnScrTabla;

private DefaultTableModel mdtabla;private JTable TabFacultades;

private JButton btCrear;private JButton btModificar;private JButton btCancelar;

private JButton btEliminar;private JButton btSalir;

Controlador ctl=new Controlador();

public FrmFacultades(){

ConfiguraVentana();DibujarControles();Oyentes();

MostrarFacultades();

public void MostrarFacultades(){


ctl.LlenarJtable(mdtabla,"select * from facultad where nomfac like'"

+txBuscar.getText()+"'",2);

public void ConfiguraVentana(){

this.setTitle("Las Facultades");

this.getContentPane().setBackground(new Color(192,201,233));

this.setSize(550,410);this.setLocationRelativeTo(null);this.setLayout(null);

this.setResizable(false);this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setIconImage(new ImageIcon(getClass().getResource("/Imagenes/add.png")).getImage());

public void DibujarControles(){

TabFacultades=new JTable();PnScrTabla=new JScrollPane();

mdtabla=new DefaultTableModel();

mdtabla.setColumnIdentifiers(new String[]{"ID","Facultad"});

TabFacultades.setBounds(10,40, 330, 70);TabFacultades.setModel(mdtabla);

lbFacultad=new JLabel("Facultad");lbFacultad.setBounds(15,25,120,25);

txFacultad=new JTextField();txFacultad.setBounds(85, 25,300,25);

lbBuscar=new JLabel("Buscar");lbBuscar.setBounds(15,20,120,25);

txBuscar=new JTextField();txBuscar.setBounds(80,15,400,24);
pnlDatos=new JPanel();pnlDatos.setBounds(0, 0,535, 70);

pnlDatos.setBorder(javax.swing.BorderFactory.createTitledBorder(null,

"Datos", javax.swing.border.TitledBorder.CENTER,

javax.swing.border.TitledBorder.DEFAULT_POSITION,

new java.awt.Font("Times new Roman",1, 12),new java.awt.Color(204,120,102)));

pnlDatos.setLayout(null);pnlDatos.add(lbFacultad);pnlDatos.add(txFacultad);

pneltabla=new JPanel();pneltabla.setBounds(0, 70,535, 230);

pneltabla.setBorder(javax.swing.BorderFactory.createTitledBorder(null

,"Listado de Facultades", javax.swing.border.TitledBorder.CENTER,

javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(

"Times new Roman",1, 12),new java.awt.Color(204,120,102)));

pnlBotones=new JPanel();pnlBotones.setBounds(0, 300,535, 70);

pnlBotones.setBorder(javax.swing.BorderFactory.createTitledBorder(null

,"", javax.swing.border.TitledBorder.CENTER,

javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(

"Times new Roman",1, 12),new java.awt.Color(204,120,102)));

btCrear=new JButton("Crear"); btCrear.setBounds(10, 10,100, 35);


btCrear.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Add.png")));

btCrear.setMnemonic('c');

btModificar=new JButton("Modificar"); btModificar.setBounds(120,10,100, 35);

btModificar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));

btModificar.setMnemonic('m');

btEliminar=new JButton("Eliminar"); btEliminar.setBounds(230,10,100, 35);

btEliminar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));

btEliminar.setMnemonic('e');

btCancelar=new JButton("Cancelar"); btCancelar.setBounds(330,10,100, 35);

btCancelar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));

btCancelar.setMnemonic('c');

btSalir=new JButton("Salir"); btSalir.setBounds(430,10,100, 35);

btSalir.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));

btSalir.setMnemonic('s');

pnlBotones.setLayout(null);pnlBotones.add(btCrear);pnlBotones.add(btModificar);

pnlBotones.add(btEliminar);pnlBotones.add(btCancelar);pnlBotones.add(btSalir);
pneltabla.setLayout(null);PnScrTabla.setBounds(10, 40, 520,170);

PnScrTabla.setViewportView(TabFacultades);pneltabla.add(txBuscar);

pneltabla.add(lbBuscar);pneltabla.add(PnScrTabla);add(pnlDatos);

add(pneltabla);add(pnlBotones);

public void Oyentes(){

btSalir.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

dispose();

});

btCrear.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

if(txFacultad.getText().trim().length()==0){

JOptionPane.showMessageDialog(null, "Faltan Datos");

else{

ctl.ActualizarRegistro("insert into facultad(nomfac) values('"


+txFacultad.getText()+"')");txFacultad.setText(null);

MostrarFacultades();

});

txBuscar.addKeyListener(new KeyListener() {

@Override public void keyTyped(KeyEvent e) {}

@Override public void keyPressed(KeyEvent e) {}

@Override

public void keyReleased(KeyEvent e) {

MostrarFacultades();

});

public static void main(String[] args) {

new FrmFacultades().setVisible(true);

}
UNASAM Ingeniería de Sistemas e Informática

SESION 34
I. Programa java que utilizan consultas con subconsulta y vistas, para la presentación de datos
El código para la implementación es el siguiente:

case 5:{
ObjVentana.setTitle("Gestión de Lectores");ObjVentana.setLocation(450, 150);

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

ObjVentana.setSize(760,530);ObjVentana.getContentPane().setLayout(null);
ObjVentana.getContentPane().setBackground(new Color(198, 250, 245));
ObjVentana.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);

JLabel lbdni=new JLabel("Dni");lbdni.setBackground(Color.BLUE);lbdni.setBounds(10,


27, 50, 25);
JTextField txdni=new
JTextField();lbdni.setBackground(Color.yellow);txdni.setBounds(65, 27, 110, 25);
JLabel lbApe=new
JLabel("Apellidos");lbApe.setBackground(Color.BLUE);lbApe.setBounds(195, 27, 100, 25);
JTextField txApe=new
JTextField();lbApe.setBackground(Color.yellow);txApe.setBounds(265, 27, 185, 25);
JLabel lbNom=new
JLabel("Nombres");lbNom.setBackground(Color.BLUE);lbNom.setBounds(470, 27, 100,
25);
JTextField txNom=new
JTextField();lbNom.setBackground(Color.yellow);txNom.setBounds(545, 27, 185, 25);

JLabel lbTipLect=new
JLabel("Tipo");lbTipLect.setBackground(Color.BLUE);lbTipLect.setBounds(10, 90, 100,
25);
JComboBox cbTipLect=new JComboBox(new
String[]{"Alumno","Administrativo","Externo"});cbTipLect.setSelectedIndex(-1);
lbTipLect.setBackground(Color.yellow);cbTipLect.setBounds(65, 90, 110, 25);
JLabel lbDir=new
JLabel("Dirección");lbDir.setBackground(Color.BLUE);lbDir.setBounds(195, 90, 100, 25);
JTextField txDir=new
JTextField();lbDir.setBackground(Color.yellow);txDir.setBounds(265, 90, 185, 25);

JLabel lbGenero=new
JLabel("Genero");lbGenero.setBackground(Color.BLUE);lbGenero.setBounds(470, 90, 100,
25);
JComboBox cbGenero=new JComboBox(new
String[]{"Masculino","Femenino"});cbGenero.setSelectedIndex(-1);
lbGenero.setBackground(Color.yellow);cbGenero.setBounds(545, 90, 185, 25);

pnlDatos=new JPanel();pnlDatos.setBounds(0, 0, 745, 132);


pnlDatos.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Datos del
Lector",

javax.swing.border.TitledBorder.CENTER,javax.swing.border.TitledBorder.DEFAULT_POS
ITION,
new java.awt.Font("Times new Roman",1, 13),new java.awt.Color(204, 120, 102)));
pnlDatos.setOpaque(false);pnlDatos.setLayout(null);
pnlDatos.add(lbdni);pnlDatos.add(txdni);pnlDatos.add(lbApe);pnlDatos.add(txApe);

pnlDatos.add(lbNom);pnlDatos.add(txNom);pnlDatos.add(lbTipLect);pnlDatos.add(cbTipLec
t);

pnlDatos.add(lbDir);pnlDatos.add(txDir);pnlDatos.add(lbGenero);pnlDatos.add(cbGenero);

/*******************LOS BOTONES DE COMANDO*******************/


JPanel pnlBotones=new JPanel();pnlBotones.setBounds(0, 125, 745, 60);
pnlBotones.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "",

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

javax.swing.border.TitledBorder.CENTER,javax.swing.border.TitledBorder.DEFAULT_POS
ITION,
new java.awt.Font("Times new Roman",1, 14),new java.awt.Color(204, 120, 102)));
pnlBotones.setOpaque(false);pnlBotones.setLayout(null);
JButton btCrear=new JButton("Crear");btCrear.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/Imagenes/aceptar.png")));
btCrear.setMnemonic('r');btCrear.setBounds(10, 12, 95,37);
JButton btEditar=new JButton("Editar");btEditar.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/Imagenes/editar.png")));
btEditar.setMnemonic('d');btEditar.setBounds(170, 12, 95,37);
JButton btEliminar=new JButton("Eliminar");btEliminar.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/Imagenes/eliminar.png")));
btEliminar.setMnemonic('e');btEliminar.setBounds(315, 12, 100,37);
JButton btCancelar=new JButton("Cancelar");btCancelar.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/Imagenes/cancelar.png")));
btCancelar.setMnemonic('c');btCancelar.setBounds(480, 12, 105,37);
JButton btSalir=new JButton("Salir");btSalir.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/Imagenes/salir.png")));
btSalir.setMnemonic('s');btSalir.setBounds(640, 12, 95,37);

pnlBotones.add(btCrear);pnlBotones.add(btEditar);pnlBotones.add(btEliminar);pnlBotones.
add(btCancelar);
pnlBotones.add(btSalir);

/*******************MOSTRAR EN LA TABLA*******************/
JPanel pnldtstabla=new JPanel();pnldtstabla.setBounds(0, 190, 745, 285);
pnldtstabla.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Listado de
Lectores",

javax.swing.border.TitledBorder.CENTER,javax.swing.border.TitledBorder.DEFAULT_POS
ITION,
new java.awt.Font("Times new Roman",1, 12),new java.awt.Color(204, 120, 102)));
pnldtstabla.setOpaque(false);

mdtbl.setColumnIdentifiers(new String[]{"Id","Dni","Apellidos y
Nombres","Dirección","Genero","tipo"});

tabla1.setModel(mdtbl);tabla1.setGridColor(Color.yellow);tabla1.setForeground(Color.BLU
E);
tabla1.setBackground(new Color(219, 250, 252));
objCtSw.setWidthTableColumn(tabla1,70, 1);objCtSw.setWidthTableColumn(tabla1,250,
2,3);
objCtSw.hideTableColumn(tabla1, 0);objCtSw.setWidthTableColumn(tabla1,90, 5);
pnlscrolltabla.setBounds(5, 50, 730, 210);pnlscrolltabla.setViewportView(tabla1);

JLabel lbBuscar=new JLabel("Buscar: ");lbBuscar.setBounds(5, 25, 100, 24);


JTextField txBuscar=new JTextField();txBuscar.setBounds(65,25, 669, 25);

pnldtstabla.setLayout(null);pnldtstabla.add(pnlscrolltabla); pnldtstabla.add(txBuscar);
pnldtstabla.add(lbBuscar);MostrarLectores(txBuscar);

ObjVentana.add(pnlDatos);ObjVentana.add(pnlBotones);ObjVentana.add(pnldtstabla);

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

/**********************LOS OYENTES DE LOS


LECTORES*************************/
btCrear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(cbGenero.getSelectedIndex()>-1){

control.ActualizarRegistro("insert into persona(dni,nom,apel,dir,gen)


values('"+txdni.getText()
+"','"+txNom.getText()+"','"+txApe.getText()+"','"+txDir.getText()+"','"
+cbGenero.getSelectedItem().toString()+"')");
control.ActualizarRegistro("insert into lector(idpersona,tipolector) values((select
idpersona "
+ "from persona order by 1 desc limit
1),'"+cbTipLect.getSelectedItem().toString()+"')");

MostrarLectores(txBuscar);txdni.setText("");txNom.setText("");txApe.setText("");txDir.set
Text("");
cbGenero.setSelectedIndex(-1);cbTipLect.setSelectedIndex(-1);
}
}
});
btSalir.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {ObjVentana.dispose();}
});
txBuscar.addKeyListener(new KeyListener() {
@Override public void keyTyped(KeyEvent e) {}@Override public void
keyPressed(KeyEvent e) {}
@Override public void keyReleased(KeyEvent e) {MostrarLectores(txBuscar);}
});
break;
}

Método
public void MostrarLectores(JTextField txb){
control.LlenarJTabla(mdtbl,"select * from vta_lectores where dni like'%"+txb.getText()
+"%' or Apellidosynombres like'%"+txb.getText()+"%';",6);
}

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Escuelas
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change
this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/

/**
*
* @author Miguel Silva
*/
import java.awt.*;import java.awt.event.*;
import javax.swing.*;import javax.swing.table.*;
import Clases.*;
public class FrmEscuelas extends JFrame{
private JTextField txEscuela;
private JLabel lbFacultad;private JLabel lbBuscar;private JLabel lbEscuela;
private JComboBox cbFacultad;
private JTextField txBuscar;
private JPanel pnlDatos;private JPanel pnlBotones;
private JPanel pneltabla;private JScrollPane PnScrTabla;
private DefaultTableModel mdtabla;private JTable TabEscuelas;
private JButton btCrear;private JButton btModificar;private JButton btCancelar;
private JButton btEliminar;private JButton btSalir;

Controlador ctl=new Controlador();String idFacultad="",idEscuela="";

public FrmEscuelas(){
ConfiguraVentana();DibujarControles();
MostrarEscuelas(); Oyentes();
ctl.LlenarJCombo(cbFacultad,"select * from facultad",2);
}

public void ConfiguraVentana(){


this.setTitle("Las Escuelas");

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

this.getContentPane().setBackground(new Color(192,201,233));
this.setSize(750,410);this.setLocationRelativeTo(null);this.setLayout(null);

this.setResizable(false);this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setIconImage(new
ImageIcon(getClass().getResource("/Imagenes/add.png")).getImage());
}
public void DibujarControles(){
TabEscuelas=new JTable();PnScrTabla=new JScrollPane();
mdtabla=new DefaultTableModel();
mdtabla.setColumnIdentifiers(new String[]{"ID","Escuela","Facultad"});
TabEscuelas.setBounds(10,40, 330, 70);TabEscuelas.setModel(mdtabla);

lbFacultad=new JLabel("Facultad");lbFacultad.setBounds(420,25,120,25);
txEscuela=new JTextField();txEscuela.setBounds(85, 25,250,25);
lbEscuela=new JLabel("Escuela");lbEscuela.setBounds(10,25,120,25);
lbBuscar=new JLabel("Buscar");lbBuscar.setBounds(15,20,120,25);
txBuscar=new JTextField();txBuscar.setBounds(80,15,646,24);
cbFacultad=new JComboBox();cbFacultad.setBounds(480, 25,240,25);

pnlDatos=new JPanel();pnlDatos.setBounds(0, 0,735, 70);


pnlDatos.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
"Datos", javax.swing.border.TitledBorder.CENTER,
javax.swing.border.TitledBorder.DEFAULT_POSITION,
new java.awt.Font("Times new Roman",1, 12),new java.awt.Color(204,120,102)));
pnlDatos.setLayout(null);pnlDatos.add(lbFacultad);pnlDatos.add(txEscuela);
pnlDatos.add(lbEscuela);pnlDatos.add(cbFacultad);

pneltabla=new JPanel();pneltabla.setBounds(0, 70,735, 230);


pneltabla.setBorder(javax.swing.BorderFactory.createTitledBorder(null
,"Listado de Escuelas", javax.swing.border.TitledBorder.CENTER,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(
"Times new Roman",1, 12),new java.awt.Color(204,120,102)));

pnlBotones=new JPanel();pnlBotones.setBounds(0, 300,735, 70);


pnlBotones.setBorder(javax.swing.BorderFactory.createTitledBorder(null
,"", javax.swing.border.TitledBorder.CENTER,

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(


"Times new Roman",1, 12),new java.awt.Color(204,120,102)));
btCrear=new JButton("Crear"); btCrear.setBounds(10, 10,100, 35);
btCrear.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Add.png")));
btCrear.setMnemonic('c');
btModificar=new JButton("Modificar"); btModificar.setBounds(120,10,100, 35);
btModificar.setIcon(new
ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btModificar.setMnemonic('m');

btEliminar=new JButton("Eliminar"); btEliminar.setBounds(230,10,100, 35);


btEliminar.setIcon(new
ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btEliminar.setMnemonic('e');

btCancelar=new JButton("Cancelar"); btCancelar.setBounds(330,10,100, 35);


btCancelar.setIcon(new
ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btCancelar.setMnemonic('c');

btSalir=new JButton("Salir"); btSalir.setBounds(430,10,100, 35);


btSalir.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btSalir.setMnemonic('s');

pnlBotones.setLayout(null);pnlBotones.add(btCrear);pnlBotones.add(btModificar);
pnlBotones.add(btEliminar);pnlBotones.add(btCancelar);pnlBotones.add(btSalir);
pneltabla.setLayout(null);PnScrTabla.setBounds(10, 40, 720,170);
PnScrTabla.setViewportView(TabEscuelas);pneltabla.add(txBuscar);
pneltabla.add(lbBuscar);pneltabla.add(PnScrTabla);add(pnlDatos);
add(pneltabla);add(pnlBotones);
}
public void MostrarEscuelas(){
/*ctl.LlenarJtable(mdtabla,"SELECT e.idescuela,e.nomes,f.nomfac FROM facultad "
+ "f INNER JOIN escuela e ON e.idfacultad=f.idfacultad where e.nomes LIKE"
+ " '%"+txBuscar.getText()+"%' or f.nomfac like
'%"+txBuscar.getText()+"%';",3);*/
ctl.LlenarJtable(mdtabla,"SELECT * FROM vta_escuelas where nomfac like '%"

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

+txBuscar.getText()+"%' or nomes like'%"+txBuscar.getText()+"%'",3);


}
public void Seleccionar(){
if(TabEscuelas.getSelectedRow()>-1){
idEscuela=TabEscuelas.getValueAt(TabEscuelas.getSelectedRow(),0).toString();

txEscuela.setText(TabEscuelas.getValueAt(TabEscuelas.getSelectedRow(),1).toString());
cbFacultad.setSelectedItem(TabEscuelas.getValueAt(TabEscuelas.getSelectedRow(),
2).toString());txEscuela.grabFocus();
}
}
public void Cancelar(){

TabEscuelas.clearSelection();idFacultad="";idEscuela="";cbFacultad.setSelectedIndex(-
1);
txBuscar.setText("");txEscuela.setText("");txEscuela.grabFocus();
}
public void Crear(){
if(cbFacultad.getSelectedIndex()<0){
JOptionPane.showMessageDialog(null,"Faltan datos");
txEscuela.grabFocus();
}
else{
if(ctl.VerificaConsulta("SELECT * FROM escuela WHERE
nomes='"+txEscuela.getText()+"'")){
JOptionPane.showMessageDialog(null, "La escuela \n"+txEscuela.getText()+" Ya
Existe");
new ElementoSwing().Marcartxt(txEscuela);
}
else{
ctl.ActualizarRegistro("insert into escuela(nomes,idfacultad) values('"
+txEscuela.getText()+"',(select idfacultad from facultad where nomfac='"
+cbFacultad.getSelectedItem().toString()+"'))");txEscuela.setText(null);
cbFacultad.setSelectedIndex(-1);MostrarEscuelas();
}
}
}

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

public void Editar(){


if(idEscuela.trim().length()==0){
JOptionPane.showMessageDialog(null,"Seleccione una escuela");
TabEscuelas.grabFocus();
}
else{
if(cbFacultad.getSelectedIndex()<0){
JOptionPane.showMessageDialog(null, "Faltan Datos");
}
else{
if(ctl.VerificaConsulta("select * from escuela where nomes='"+txEscuela.getText()
+"' and idEscuela <>'"+idEscuela+"'")){
JOptionPane.showMessageDialog(null,"Cuidado la escuela "+txEscuela.getText()
+" Puede generar una repetición");new ElementoSwing().Marcartxt(txEscuela);
}
else{
ctl.ActualizarRegistro("update escuela set nomes='"+txEscuela.getText()
+"',idFacultad=(select idfacultad from facultad where nomfac='"
+cbFacultad.getSelectedItem().toString()+"') where idEscuela='"+idEscuela+"'");
idFacultad="";idEscuela="";txEscuela.setText("");cbFacultad.setSelectedIndex(-1);
MostrarEscuelas();
}
}
}
}

public void Oyentes(){


btSalir.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
cbFacultad.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
new ElementoSwing().VolverCbo_tx(txEscuela);

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

}
@Override public void focusLost(FocusEvent e) {}
});
btCrear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Crear();
}
});
txBuscar.addKeyListener(new KeyListener() {
@Override public void keyTyped(KeyEvent e) {}
@Override public void keyPressed(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {
MostrarEscuelas();
}
});
TabEscuelas.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
Seleccionar();
}
@Override public void mousePressed(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
@Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseExited(MouseEvent e) {}
});
btCancelar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Cancelar();
}
});
btModificar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Editar();

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

}
});
/*
btEliminar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Eliminar();
}
});

*/
}

public static void main(String[] args) {


new FrmEscuelas().setVisible(true);
}
}

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

SESIÓN 35

FUNCIONES DEL DBMS MYSQL


I. FUNCIONES TIPO CADENA DE MYSQL

Son funciones que después de realizar la tarea que tiene asignada usando o no
parámetros, casi siempre retornan una cadena de caracteres como resultado, entre estas
tenemos las siguientes:
a. Ord(caracter)
Esta función recibe como parámetro un valor del tipo carácter y devuelve como
resultado el código ASCII, del carácter.

b. Char(ascii)
Esta función recibe como argumento un valor o código ascii y devuelve el carácter que
se corresponde con este código ascii.

c. Concat(cadena1, cadena2, …)
Es una función que sirve para unir o juntar dos o más cadenas, retorna como
resultado una nueva cadena formada por las cadenas que se le pasaron como
argumento.

d. Concat-ws(separator, cadena1, cadena2,….)


Esta función sirve para concatenar o unir cadenas de caracteres, pero a diferencia de
concat incluye un separador de las cadenas, justamente las siglas ws provienen de
“with separtor”; el primer argumento especifica el separador que separar al resto de

PROGRAMACIÓN III Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

cadenas.

e. Elt(posision,conjuntodecadenas)
Es una función que sirve para retornar la cadena que ocupa la posición pasada como
argumento dentro de la lista de cadenas.

f. Find_in_set(cadena, lista de cadenas)


Esta función recibe como argumento una cadena y una lista de cadenas de caracteres,
se usa para poder saber si el primer argumento; es decir la cadena se encuentra dentro
de la lista de cadenas, si la cadena no se encuentra devuelve 0 pero si se encuentra
retorna la posición en la que está.

g. Length(cadena)
Esta función sirve para calcular la longitud o cantidad de caracteres de una cadena,
para lo cual recibe como argumento una cadena de caracteres.

h. Locate(subcadena, cadena)
Esta función tiene dos argumentos una subcadena y una cadena de caracteres, permite
saber si la subcadena está en la cadena. Retorna 0 sino encuentra ninguna coincidencia
en caso contrario devuelve la posición de la primera coincidencia.

i. Position(subcadena in cadena)

PROGRAMACIÓN III Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Esta función necesita dos argumentos una subcadena y una cadena vinculado por el
operador in, sirve para conocer si la subcadena se encuentra la cadena, si es asi retorna
la posición en caso contrario devuelve 0.

j. instr(cadena,subcadena)
Esta función necesita dos argumentos una cadena y una subcadena, devuelve la
posición de la primera coincidencia de la subcadena en la cadena, en caso contrario el
valor 0.

k. lpad(cadena, longitud, cadena de relleno)


Función que permite completar una cadena de caracteres con la cadena de relleno,
hasta conseguir que la cadena resultado tenga la longitud indicada en el segundo
argumento, agregando la cadena de relleno por la izquierda o al inicio de la cadena.
Necesita 3 argumentos una cadena de caracteres, la cantidad o longitud que debe tener
la cadena final y la cadena de relleno.
Hay que tener en cuenta que, si la subcadena tiene una longitud mayor que la longitud
enviada como argumento, el resultado puede ser que la cadena de caracteres final,
aparezca hasta con la longitud del argumento.

l. rpad(cadena, longitud, cadena de relleno)


Función que permite completar una cadena de caracteres con la cadena de relleno,
hasta conseguir que la cadena resultado tenga la longitud indicada en el segundo
argumento, agregando la cadena de relleno por la derecha o al final de la cadena.
Cuenta con 3 argumentos una cadena de caracteres, la cantidad o longitud que debe
tener la cadena final y la cadena de relleno.
Hay que tener en cuenta que si la cadena tiene una longitud mayor que la longitud

PROGRAMACIÓN III Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

enviada como argumento, el resultado puede ser que la cadena de caracteres final,
aparezca hasta con la longitud del argumento.

m. left(cadena, cantidad)
Esta función tiene dos argumentos una cadena de caracteres y una cantidad, sirve para
tomar una cantidad de caracteres empezando desde la izquierda o inicio de la cadena
de caracteres.

n. right(cadena, cantidad)
Esta función tiene dos argumentos una cadena de caracteres y una cantidad, sirve para
tomar una cantidad de caracteres empezando desde la derecha o final de la cadena de
caracteres.

o. Substring(cadena,posicioninicio, cantidad)
Esta función permite tomar o extraer partes de una cadena de caracteres desde una
posición indicada una determinada cantidad. Tienen tres argumentos el primero la
cadena de caracteres de donde se va extraer la subcadena resultado, la posición desde
donde se inicia la extracción y el tercer argumento es la cantidad de caracteres a
extraer.

p. ltrim(cadena)
Esta función permite eliminar los espacios en blanco que existan en el lado izquierdo
de una cadena de caracteres. Tiene como argumento una cadena de caracteres y retorna
otra cadena sin los espacios en blanco que puede tener al inicio.

PROGRAMACIÓN III Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

q. rtrim(cadena)
Esta función permite eliminar los espacios en blanco que se encuentran a la derecha o
al final de una cadena de caracteres. Tiene como argumento una cadena de caracteres
con espacios en blanco al final y retorna otra cadena sin los espacios en blanco que
puede tener al final.

r. trim(cadena)
Esta función permite eliminar los espacios en blanco que están a la derecha y a la
izquierda de una cadena de caracteres. Tiene como argumento una cadena de
caracteres y retorna otra cadena sin los espacios en blanco que puede tener tanto al
inicio como al final.

s. replace(cadena,cadenareemplazo,cadenaaremplazar)
Esta función tiene 3 argumentos cadenas de caracteres, la cadena, la cadena que va a
ser reemplazada y la cadena que se va a reemplazar.

t. repeat(cadena, cantidad)
Esta función presenta 2 argumentos el primero es una cadena de caracteres y el
segundo es una cantidad. Sirve para repetir una cantidad de veces la cadena de
caracteres.

PROGRAMACIÓN III Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

u. reverse(cadena)
Esta función sirve para invertir el orden de los caracteres de una cadena para lo cual
necesita como argumento una cadena de caracteres.

v. insert(cadena, pocision, longitud,nuevacadena);


Esta función sirve para insertar en una cadena, otra cadena a partir de la posición
indicada como argumento y remplazando una cantidad de la cadena principal
especificada en el argumento longitud.

w. lcase(CADENA)
Esta función sirve para convertir de mayúscula a minúscula una cadena de caracteres,
por lo que necesita que se le envía como argumento una cadena escrita en mayúsculas.

x. ucase(cadena)
Esta función sirve para convertir de minúscula a mayúscula una cadena de caracteres,
por lo que necesita que se le envía como argumento una cadena escrita en minúscula.

y. strcmp(cadena1,cadena2)
Esta función sirve para convertir comparar dos cadenas de caracteres, por lo por lo que
necesita que se le envía como argumentos dos cadenas. Devuelve el valor de 0 si las
cadenas son iguales, 1 si la primera cadena es mayor que la segunda y -1 si la primera

PROGRAMACIÓN III Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

cadena es menor que la segunda.

PROGRAMACIÓN III Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

SESION 36
FUNCIONES DEL DBMS MYSQL
I. FUNCIONES NUMÉRICAS

Son funciones que después de realizar la tarea que tiene asignada usando o no parámetros, siempre
retornan un valor numerico como resultado, entre estas tenemos las siguientes:

Entre las más utilizadas de esta categoría de funciones tenemos a las siguientes:

a. Abs(n)
Está función sirve para obtener el valor absoluto de un número.

b. Acos(n)
Con esta función se puede calcular el arcoseno de un número n, pero el valor de n tiene que estar
entre -1 y 1, porque de lo contrario nos retorna null.

c. Asin (x)
Es una función que retorna el arcoseno de un valor x, el cual debe estar entre el valor 0 y 1, porque
de lo contrario retorna un valor nulo.

d. Atan(x)
Es una función que permite obtener el arcotangente de un valor x, el cual debe estar entre el valor
0 1, porqie de lo contrario retorna un valor nulo.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

e. Ceil(x)
Es una función que permite obtener el valor entero más pequeño pero no menor a x que se le envía
como argumento.

f. Cos(x)
Esta función permite obtener el coseno de un valor x, pero se debe tener en cuenta que el valor de
x debe estar expresado en radianes.

g. Cot(x)
Esta función permite obtener el cotangente de un valor x, pero se debe tener en cuenta que el valor
de x debe estar expresado en radianes.

h. Degress(x)
Esta función permite convertir el valor de x expresado en radianes, en un valor que representa
grados.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

i. Exp (x)
Mediante esta función se obtiene el valor de la constante e o de euler, pero elevada a la potencia
indicada mediante el argumento x.

j. Greatest (n1,n2,n3,….)
Es una función que retorna el valor mayor de un conjunto de valores, para hacerlo necesita de más
de dos argumentos.

k. in(lista de valores)
Permite saber si un valor determinado se encuentra dentro de una lista de valores, si es así retorna
el valor 1 de lo contrario no devuelve 0.

l. ln(x)
Esta es una función que nos permite calcular u obtener el logaritmo natural de x, el cual es pasado
como argumento; es decir el logaritmo de x en base e. Si el valor de x es negativo el resultado es
un valor nulo.

m. log(b,x)
Esta función sirve para calcular el logaritmo de x para una base arbitraria b, si se utiliza un solo
argumento, es equivalente con la función ln.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

n. Mod(dividendo, divisor)
Es una función que permite calcular el residuo o módulo de una división para lo cual recibe como
dos argumentos, el dividendo y el divisor.

o. Pow(x,y)
Esta función permite calcular la potencia de un numero en una determinada base, para lo
cual se le envia como argumento la base x y el exponente y.

p. Radians(x)
Esta función permite la conversión de un valor x expresado en grados a un valor en radianes.

q. Round(n,d)
Es una función que ayuda a redondear un número decimal a una cantidad de decimales, para esto
necesita dos argumentos el número decimal n y la cantidad de decimales d.

r. sqrt(n)
Es una función que nos va a permitir obtener la raíz cuadrada de un número n que se le pasa como
argumento.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

II. FUNCIONES DE FECHA


a. Adddate()
Esta función permite incrementar el valor de una fecha, tiene 2 formas o variantes de
representación. adddate(fecha, interval cantidad tipo) y la forma adddate(fecha, cantdias), en la
primera se puede modificar el día, mes o año en cambio en la segunda solo se usa para incrementar
días.

b. Curdate()
Esta función permite obtener la fecha actual del sistema y como se puede observar no
necesita de ningún argumento, así también existen la función current_date() que sirve para
lo mismo.

c. date(expr)
Esta función permite extraer la parte de fecha de una expresión que contiene una fecha y
una hora.

d. datediff(fecha1, fecha2)

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Es una función que permita calcular la cantidad de días que existen entre dos fechas, cuando
la fecha1 es mayor que la fecha2, entonces el valor que devuelve es una cantidad positiva
y si es al contrario, el valor que retorna la función es una cantidad negativa.

e. date_format(fecha, formato)
Es una función que permite poner a una fecha en un determinado formato, para hacerlo se
necesitan 2 argumentos, la fecha y el formato que se aplicara a esta fecha.

f. dayname(fecha)
Esta función permite obtener el nombre del día de la semana de una fecha, por lo que es
necesario que reciba como argumento una fecha.

g. dayofmonth(fecha)
Esta es una función que permite obtener el dia del mes de una fecha que se le envia como
argumento.

h. dayofweek(fecha)
Esta es una función que sirve para obtener el día de la semana de una fecha, por eso es
necesario que reciba una fecha como argumento.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

i. dayofyear(fecha)
Es una función que sirve para obtener el dia del año entre 1 y 366 de una fecha que se le
pasa como argumento.

j. date_sub(fecha interval cantidad day)


Esta función permite restar a una fecha una determinada cantidad de días, por lo que
necesita una fecha y una cantidad de días.

k. from_days(numdia)
Esta es una función mediante la cual se puede obtener una fecha a partir de un valor
numérico que se le envía como argumento.

l. last_day(fecha)
Esta función retorna el último día o fecha a partir de la fecha que fue pasada como
argumento.

m. makedate(año, días)
Esta función permite generar una fecha a partir de dos parámetros, el año y la cantidad de
días que tiene que ser mayor a 0, porque de lo contrario devolverá el valor null.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

n. month(fecha)
Esta función permite obtener el número de mes de la fecha que se le pasa como argumento.

o. monthname(fecha)
Esta función permite obtener el nombre del mes de una fecha que es enviada como
argumento.
Trabaja con la variable SET lc_time_names = 'es_ES';

p. now()
Esta función sirva para obtener la fecha y hora actual del sistema y como se observa no
necesita ningún argumento.

q. sysdate()
Es una función que permite obtener la fecha y hora del sistema.

r. to_days(fecha)
Es una función que sirve para determinar cuántos días han pasado hasta la fecha que se le
envía como argumento, tomando como referencia el año 0.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

s. timestampdiff(unit,date_time_expr1,date_time_expr2)
Esta función devuelve un valor después de restar una expresión de fecha y hora de otra,
necesita tres argumentos, la unidad y las dos expresiones de fecha, no es necesario que ambas
expresiones sean del mismo tipo una puede ser fecha y la otra fechahora.

III. FUNCIONES DE HORA


a. Addtime(expre, exprincr)
Es una función que permite incrementar a una expresión de fecha y hora otra expresión del
mismo tipo.

b. curtime()
Esta es una función que permite obtener la hora actual del sistema y como se observa no
necesita ningún argumento.

c. hour(hora)
Esta función permite obtener la hora de un dato o expresión del tipo hora que se le envía
como argumento. Si el argumento que le envia no es de tipo fecha retorna Null.

Si la hora esta fuera de rango, nos devuelve 0.

Cuando le pasamos un dato del tipo hora, nos retorna solo la hora.

d. maketime(hora,minuto,segundo)
Esta función permite obtener un valor horario a partir de la hora, minutos y segundos que
se le pasa como argumento.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Cuando el parametro es incorrecto retorna el valor Null.

En cambio si los argumentos son correctos, nos devuelve una hora.

e. microsecond(expresion)
Esta función permite que obtener los microsegundos a partir de una expresión que contiene
o almacena una hora.

f. minute(expres_hora)
Esta función permite obtener los minutos que existen a partir de un dato del tipo hora que
recibe como argumento.

g. second(hora)
Esta función sirve para obtener los segundos a partir de un dato del tipo hora que se le pasa
como argumento.

h. subtime(hora1,hora2)
Esta función permite restar dos horas que se le pasan como argumento, donde la hora1 tiene
que ser mayor que la hora2.

i. time(expresion)
Esta función permite obtener la hora a partir de una expresión que se le pasa como
argumento.

j. timediff(expre1, expre2)
Es una función que permite obtener la diferencia entre dos expresiones que contienen horas.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

k. time_format(hora, formato)
Esta función permite asignarle formato a una hora, para lo cual necesita como argumentos
la expresión que contiene una hora y el formato que se le aplicara a la hora.

l. time_to_sec(hora)
Esta función permite obtener la cantidad de segundo contenidos en una hora, para lo cual
necesita que se le envie una hora como argumento.

PROGRAMACIÓN II Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

SESION 37
I. FUNCIONES DE CIFRADO
a. aes_encrypt(cadena_cifrar, clave)
Esta función permite el cifrado de una cadena usando el algoritmo AES (Advance
Encryption Standar), usa una codificación con una clave de 128 bits de longitud pero que
se puede extender a 256; para esto necesita de dos argumentos, la cadena a cifrar y la clave.

b. aes_decrypt(cadenacifrada, clave)
Esta función permite el descifrar de una cadena encriptada; para hacerlo necesita de dos
argumentos, la cadena cifrada y la clave con la que fue cifrada previamente.

c. hex(String | Number)
Esta función de Mysql para devolver un valor de cadena hexadecimal equivalente de una
cadena o entrada numerica. Cuando la entrada es una cadena, cada byte de cada carácter se
traduce en 2 digitos hexadecimales; también devuelve una representación de cadena
hexadecimal de un valor numérico N, tratado como un número largo BIGINT.

d. md5 (datoencriptar)
Esta función permite cifrar un dato o cadena, por lo cual necesita como argumento la
cadena que se desea cifrar, el resultado que retorna es una cadena cifrada con una longitud
de 32 caracteres.

e. Sha1 (datoacifrar)
Esta función es similar a MD5, es decir cifra un dato o cadena de caracteres, por lo tanto
necesita como argumento la cadena a cifrar y retorna esa cadena cifrada con una longitud de
40 caracteres.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

II. PROCEDIMIENTOS ALMACENADOS


1. Definición
Es un conjunto de instrucciones que le damos a un computador o un servidor de base de datos,
para realizar tareas o acciones específicas en la solución de determinados problemas, interactúa
directamente con otros componentes de una base de datos, como por ejemplo con las tablas. Sus
instrucciones en Mysql siempre finalizan con (;) e incluso el final de las estructuras de control
finalizan con (;). Permiten ahorrar tiempo en el procesamiento de datos y quedan almacenados
formando parte de la base de datos.

En la implementación utilizan las estructuras o flujos de control del DBMS (pe. en Mysql if
condición then instrucciones; else instrucciones; endif;). Pueden tener o no parámetros o
argumentos, pero es conveniente que los tenga porque así se hacen más generales y sobre todo
reutilizables. Sus parámetros pueden ser de entrada o de salida.

Ayudan a reducir líneas de código desde lenguaje de programación (pe. Java), además favorece
la velocidad de procesamiento en las aplicaciones software y son fáciles de utilizar desde
cualquier lenguaje de programación (pe. Java).

Finalmente son los que permiten la programación en la capa de datos de una aplicación o
programa y cuando se graba una copia de ellos se genera un archivo de texto con la extensión .sql.

El autor.

2. Sintaxis para crear un procedimiento almacenado


Su sintaxis general es la siguiente.
Delimiter//
Create procedure nombreprocedimiento(in | out [parámetros tipo de dato])
Begin
Instrucciones;
End//
Delimiter;
Fuente: Elaboración propia

Dentro del bloque de instrucciones se utilizan elementos como variables y flujos de


control.
a. Variables
Son objetos que reservan un espacio de memoria del ordenador, sirve para
almacenar los datos que se procesan en el procedimiento o función, el valor que
tienen asignado puede cambiar en cualquier momento durante la ejecución. Para
trabajar con variables debemos crearlas o declararlas, asignarle un valor y
recuperar su valor.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

• Crear una variable


Para crear una variable se usa la palabra reservada declare y la instrucción
completa es la siguiente
declare nombrevariable tipodedato;
• Asignar un valor a una variable
Podemos asignar un valor al momento de declarar la variable.
declare nombrevariable tipodedato default valor inicial;
También podemos asignar un valor a una variable en cualquier parte del código y
dependiendo de la necesidad de la siguiente forma.

Set nombrevariable=valor;
b. Flujos de control
Son instrucciones escritas en un lenguaje como sql para Mysql, mediante los
cuales se puede organizar las instrucciones o código de un procedimiento o una
función de manera eficiente. Son de tipo selectivas y repetitivas.
Selectivas
Simple

If condición then
Instrucciones;
Else
Instrucciones;
End if;
Múltiple

Case Expresion o variable


When valor 1 then
Instrucciones;
When valor 2 then
Instrucciones;
.
.
.
When valor n then
Instrucciones;
Else
Instrucciones;
End Case;

Interactivas o Repetitivas
While condición do
Instrucciones;
End While;

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Repeat
Instrucciones;
Until condición
End Repeat;

Loop_label : loop
instrucciones
if condicion then
leave loop_label;
end if;
End Loop;

c. Llamar o eliminar registros


Despues de haber creado el preocedimiento almacenado se tiene la necesidad de de ejecutarlo o
incluso eliminarlo y esto se hace de la siguinete manera.

1.- Llamar a un procedimiento almacenado

Para llamar o ejecutar un procedimiento almacenado, se utiliza el comando call de la siguiente


forma:

call nombredelprocedimiento([valores de los parametros]);

2.- Eliminar un procedimiento almacenado.

Para eliminar un procedimiento almacenado, se utiliza el comando drop procedure de la


siguiente forma:

nombredelprocedimiento();

3. Ejemplos
1.- Procedimientos almacenados sin base de datos
Implemente un procedimiento almacenado que le permita calcular cuántos números pares
existen en un rango formado por dos números donde el segundo es mayor que el primero
en al menos 100.

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Ahora se le pide a usted que ademas de la cantidad, muestre cuáles son esos números,
separados por comas (200, 202, 204,……., 298,300).

DELIMITER//
CREATE PROCEDURE NUMEROS_PRIMOS(NUM1 INT,NUM2 INT)
BEGIN
DECLARE N INT; DECLARE D INT;
DECLARE CD INT;DECLARE CTPR INT DEFAULT 0;
IF (NUM2-NUM1)<=20 THEN
SET N=NUM1;
WHILE N<=NUM2 DO
SET D=1; SET CD=0;
WHILE D<=N DO
IF MOD(N,D)=0 THEN
SET CD=CD+1;
END IF;
SET D=D+1;
END WHILE;
IF CD=2 THEN
SET CTPR=CTPR+1;
END IF;
SET N=N+1;
END WHILE;
CASE CTPR
WHEN 0 THEN
SELECT CONCAT(CTPR,'-->','CERO');
WHEN 1 THEN
SELECT CONCAT(CTPR,'-->','UNO');
WHEN 2 THEN
SELECT CONCAT(CTPR,'-->','DOS');
WHEN 3 THEN
SELECT CONCAT(CTPR,'-->','TRES');
WHEN 4 THEN
SELECT CONCAT(CTPR,'-->','CUATRO');
WHEN 5 THEN
SELECT CONCAT(CTPR,'-->','CINCO');
WHEN 6 THEN

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

SELECT CONCAT(CTPR,'-->','SEIS');
WHEN 7 THEN
SELECT CONCAT(CTPR,'-->','SIETE');
WHEN 8 THEN
SELECT CONCAT(CTPR,'-->','OCHO');
WHEN 9 THEN
SELECT CONCAT(CTPR,'-->','NUEVE');
WHEN 10 THEN
SELECT CONCAT(CTPR,'-->','DIEZ');
END CASE;
ELSE
SELECT 'NO CUMPLE LA CONDICION';
END IF;
END//
DELIMITER;

DELIMITER//
CREATE PROCEDURE NUMEROS_PRIMOSREPEAT(NUM1 INT,NUM2 INT)
BEGIN
DECLARE N INT; DECLARE D INT;DECLARE CD INT;DECLARE CTPR INT DEFAULT 0;
DECLARE RESU VARCHAR(120) DEFAULT '';
IF (NUM2-NUM1)<=20 THEN
SET N=NUM1;
WHILE N<=NUM2 DO
REPEAT
SET D=1; SET CD=0;
REPEAT
IF MOD(N,D)=0 THEN
SET CD=CD+1;
END IF;
SET D=D+1;
UNTIL D=N;
END REPEAT;

IF CD=2 THEN
SET CTPR=CTPR+1;
END IF;
SET N=N+1;
UNTIL N=NUM2
END REPEAT;
-- END WHILE;
CASE CTPR
WHEN 0 THEN
SET RESU=CONCAT(CTPR,'-->','CERO');
WHEN 1 THEN
SET RESU= CONCAT(CTPR,'-->','UNO');
WHEN 2 THEN
SET RESU= CONCAT(CTPR,'-->','DOS');
WHEN 3 THEN
SET RESU= CONCAT(CTPR,'-->','TRES');
WHEN 4 THEN
SET RESU= CONCAT(CTPR,'-->','CUATRO');
WHEN 5 THEN
SET RESU= CONCAT(CTPR,'-->','CINCO');
WHEN 6 THEN
SET RESU= CONCAT(CTPR,'-->','SEIS');
WHEN 7 THEN
SET RESU= CONCAT(CTPR,'-->','SIETE');
WHEN 8 THEN

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

SET RESU= CONCAT(CTPR,'-->','OCHO');


WHEN 9 THEN
SET RESU= CONCAT(CTPR,'-->','NUEVE');
WHEN 10 THEN
SET RESU= CONCAT(CTPR,'-->','DIEZ');
END CASE;
SELECT RESU RESULTADO;
ELSE
SELECT 'NO CUMPLE LA CONDICION';
END IF;
END//
DELIMITER;

2.- Procedimientos almacenados sin base de datos


Por ejemplo se puede implementar procedimientos almacenados que nos permitan dar
mantenimiento a una tabla de una base de datos; es decir crear, modificar o editar y
eliminar los datos de los registros de las tablas o cualquier otra operación sobre los datos
de una BD, a continuación se tiene un procedimiento almacenado para crear, modificar y
eliminar los registros de la tabla usuario de una BD.

drop procedure GeneraComprobante;


delimiter//
create procedure GeneraComprobante(tcom varchar(12),ser varchar(8),num int)
begin
declare res varchar(25) default '';
declare lnt int default 0;
if strcmp(tcom,'Boleta')<>0 and strcmp(tcom,'Factura')<>0 and
strcmp(tcom,'Guia de remision')<>0 then
select 'El tipo de comprobate es incorrecto';
else
set num=num+1;set lnt=length(num);
case lnt

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

when 1 then
set res=concat(tcom,' ',ser,'_','000000',num);
when 2 then
set res=concat(tcom,' ',ser,'_','00000',num);
when 3 then
set res=concat(tcom,' ',ser,'_','0000',num);
when 4 then
set res=concat(tcom,' ',ser,'_','000',num);
when 5 then
set res=concat(tcom,' ',ser,'_','00',num);
when 6 then
set res=concat(tcom,' ',ser,'_','0',num);
end case;
select res;
end if;
end//
delimiter;

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

SESION 38
I. Crear procedimiento almacenado con parametros de entrada
Como ya se dijo en sesiones anteriores los procedimientos almacenados puedente tener
parametros de diferentes tipos de datos pero a us vez estos pueden ser de entrada/salida;
en Mysql para vindicar que se esta utilizado parametros de entrada al parametro se le
antepone la pálabra reservada out, tal como se muestra a continuación.
a. Crear el procedimiento almacenado
A continuacion creamos el procedimiento almcenado que que permite obtener la
cantidad de editoriales, que tienen un identificador mayor a 3.
delimiter//
create procedure DevoDarpProc(out devl text)
begin
set devl=concat_ws(' ',(select count(*) from editorial where ideditorial>3));
end//
delimiter;

b. Ejecutar o llamar a un procedimiento almacenado.


Desúes de crear el procedimiento almacenado se procede a su ejecución o uso, talm
como se muestra en las siguientes líneas de código.

call DevoDarpProc(@resul);
select @resul Resultado;

Como se observa en las lineas de código anterior se llama al procedimiento


almacenado con la palabra reservada call, pero se tiene que enviar una variable libre
para el parametro de salida en este caso @resul; posteriormente se realiza un select
sobre la variable(s), de los parametros y para este caso especifico el resultado es:

II. Utilizar un procedimiento almacenado con parametro de entrada


Habiendo implementado el procedimiento almacenado en el DBMS Mysql, se puede
proceder a utilizar el procedimiento almacenado desde un programa en Java.
txDir.addKeyListener(new KeyListener() {
@Override public void keyTyped(KeyEvent e) {
if((e.getKeyChar()==10)&&(txDir.getText().trim().length()>0)){
try{
control.Base.cllst=control.Base.conec.prepareCall("call DevoDarpProc(?);");
control.Base.cllst.registerOutParameter(1,Types.VARCHAR);
control.Base.cllst.execute();

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

JOptionPane.showMessageDialog(null,"El resultado es:


"+control.Base.cllst.getString(1));
}
catch(SQLException ex){}
}
}
@Override public void keyPressed(KeyEvent e) {}
@Override public void keyReleased(KeyEvent e) {}
});

Como se observa en el código anterior cuando se ingresa un dato en la caja de texto


txDir, se ejecuta el procedimiento almacenado DevoDarProc, que tiene un parametro
de entrada, para lo cual estamos usando el atributo cllst del objeto Base y objeto
control, que a su vez es un objeto de la clase CallableStatement. Preparamos la
ejcucion con la instrucción,
control.Base.cllst=control.Base.conec.prepareCall("call DevoDarpProc(?);");, se
registra el el parametro de salida que este caso es el primero o número 1 y se le indica
que el tipo de dato VARCHAR, mediante la clase Types que se encuentra en el
paquete java.sql.Types;, con la instrucción
control.Base.cllst.registerOutParameter(1,Types.VARCHAR);, se ejecuta la
sentencia mediante control.Base.cllst.execute();, finalmente recuperamos el dato que
esta alamcenado en el parametro de salida con la instrucción
JOptionPane.showMessageDialog(null,"El resultado es:
"+control.Base.cllst.getString(1));

Otro ejemplo: procedimieto almacenado que permita saber nombres y apellidos de un


lector cuyo dni es pasado como argumento.
Código:
delimiter//
create procedure ApelliNombresConDni(in dni varchar(8),out apenom text)
begin
set apenom=(select apellidosynombres from vta_lectores1 where dni=dni limit 1);
end//
delimiter;

Utilizar el procedimiento
call ApelliNombresConDni('45784512',@apenom);
select @apenom;

Resultado

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Llamar desde un programa en java


txDir.addKeyListener(new KeyListener() {
@Override public void keyTyped(KeyEvent e) {
if((e.getKeyChar()==10)&&(txDir.getText().trim().length()>0)){
try{
control.Base.cllst=control.Base.conec.prepareCall("call ApelliNombresConDni(?,?);");
control.Base.cllst.setString(1,txdni.getText());
control.Base.cllst.registerOutParameter(2,Types.VARCHAR);
control.Base.cllst.execute();
JOptionPane.showMessageDialog(null,"El resultado es:
"+control.Base.cllst.getString(2));
}
catch(SQLException ex){}
}
}
@Override public void keyPressed(KeyEvent e) {}
@Override public void keyReleased(KeyEvent e) {}
});

Resultado

PROGRAMACIÓN II Msc. Ing. Miguel Angel Silva Zapata

También podría gustarte