Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
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.
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.
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.
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.
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.
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.
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.
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.
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);
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();
}
});
}
}
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.
import Clases.*;
String idFacultad="";
public FrmFacultades(){
ConfiguraVentana();DibujarControles();Oyentes();MostrarFacultades();
+txBuscar.getText()+"%'",2);
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(){
mdtabla=new DefaultTableModel();
mdtabla.setColumnIdentifiers(new String[]{"ID","Facultad"});
lbFacultad=new JLabel("Facultad");lbFacultad.setBounds(15,25,120,25);
lbBuscar=new JLabel("Buscar");lbBuscar.setBounds(15,20,120,25);
txBuscar=new JTextField();txBuscar.setBounds(80,15,400,24);
pnlDatos.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
"Datos", javax.swing.border.TitledBorder.CENTER,
javax.swing.border.TitledBorder.DEFAULT_POSITION,
pnlDatos.setLayout(null);pnlDatos.add(lbFacultad);pnlDatos.add(txFacultad);
pneltabla.setBorder(javax.swing.BorderFactory.createTitledBorder(null
pnlBotones.setBorder(javax.swing.BorderFactory.createTitledBorder(null
,"", javax.swing.border.TitledBorder.CENTER,
btCrear.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Add.png")));
btCrear.setMnemonic('c');
btModificar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btModificar.setMnemonic('m');
btEliminar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btEliminar.setMnemonic('e');
btCancelar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btCancelar.setMnemonic('c');
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);
PnScrTabla.setViewportView(TabFacultades);pneltabla.add(txBuscar);
pneltabla.add(lbBuscar);pneltabla.add(PnScrTabla);add(pnlDatos);
add(pneltabla);add(pnlBotones);
btSalir.addActionListener(new ActionListener() {
@Override
dispose();
});
btCrear.addActionListener(new ActionListener() {
@Override
if(txFacultad.getText().trim().length()==0){
txFacultad.grabFocus();
else{
+txFacultad.getText()+"'")){
new ElementoSwing().Marcartxt(txFacultad);
else{
+txFacultad.getText()+"')");txFacultad.setText(null);
MostrarFacultades();
});
btModificar.addActionListener(new ActionListener() {
@Override
Editar();
});
btEliminar.addActionListener(new ActionListener() {
@Override
Eliminar();
}
});
txBuscar.addKeyListener(new KeyListener() {
@Override
MostrarFacultades();
});
TabFacultades.addMouseListener(new MouseListener() {
@Override
Seleccionar();
});
if(TabFacultades.getSelectedRow()>-1){
idFacultad=TabFacultades.getValueAt(TabFacultades.getSelectedRow(),0).toString();
txFacultad.setText(TabFacultades.getValueAt(TabFacultades.getSelectedRow(),1).toString());
txFacultad.grabFocus();
if(idFacultad.trim().length()==0){
JOptionPane.showMessageDialog(null,"Selecciona una facultad");
TabFacultades.grabFocus();
else{
if(txFacultad.getText().length()==0){
else{
else{
MostrarFacultades();
if(idFacultad.trim().length()==0){
TabFacultades.grabFocus();
else{
txFacultad.setText(null);idFacultad="";MostrarFacultades();
}
}
new FrmFacultades().setVisible(true);
}
SESION 33
/**** @author Miguel Silva****/
import Clases.*;
public FrmFacultades(){
ConfiguraVentana();DibujarControles();Oyentes();
MostrarFacultades();
+txBuscar.getText()+"'",2);
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());
mdtabla=new DefaultTableModel();
mdtabla.setColumnIdentifiers(new String[]{"ID","Facultad"});
lbFacultad=new JLabel("Facultad");lbFacultad.setBounds(15,25,120,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,
pnlDatos.setLayout(null);pnlDatos.add(lbFacultad);pnlDatos.add(txFacultad);
pneltabla.setBorder(javax.swing.BorderFactory.createTitledBorder(null
pnlBotones.setBorder(javax.swing.BorderFactory.createTitledBorder(null
,"", javax.swing.border.TitledBorder.CENTER,
btCrear.setMnemonic('c');
btModificar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btModificar.setMnemonic('m');
btEliminar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btEliminar.setMnemonic('e');
btCancelar.setIcon(new ImageIcon(this.getClass().getResource("/Imagenes/Accept.png")));
btCancelar.setMnemonic('c');
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);
btSalir.addActionListener(new ActionListener() {
@Override
dispose();
});
btCrear.addActionListener(new ActionListener() {
@Override
if(txFacultad.getText().trim().length()==0){
else{
MostrarFacultades();
});
txBuscar.addKeyListener(new KeyListener() {
@Override
MostrarFacultades();
});
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);
ObjVentana.setSize(760,530);ObjVentana.getContentPane().setLayout(null);
ObjVentana.getContentPane().setBackground(new Color(198, 250, 245));
ObjVentana.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
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);
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);
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);
pnldtstabla.setLayout(null);pnldtstabla.add(pnlscrolltabla); pnldtstabla.add(txBuscar);
pnldtstabla.add(lbBuscar);MostrarLectores(txBuscar);
ObjVentana.add(pnlDatos);ObjVentana.add(pnlBotones);ObjVentana.add(pnldtstabla);
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);
}
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;
public FrmEscuelas(){
ConfiguraVentana();DibujarControles();
MostrarEscuelas(); Oyentes();
ctl.LlenarJCombo(cbFacultad,"select * from facultad",2);
}
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);
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 '%"
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();
}
}
}
}
@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();
}
});
/*
btEliminar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Eliminar();
}
});
*/
}
SESIÓN 35
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.
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.
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)
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.
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.
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.
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.
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
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.
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.
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.
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.
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)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
Interactivas o Repetitivas
While condición do
Instrucciones;
End While;
Repeat
Instrucciones;
Until condición
End Repeat;
Loop_label : loop
instrucciones
if condicion then
leave loop_label;
end if;
End Loop;
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.
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
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
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;
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;
call DevoDarpProc(@resul);
select @resul Resultado;
Utilizar el procedimiento
call ApelliNombresConDni('45784512',@apenom);
select @apenom;
Resultado
Resultado