Upload
jorge-gonzales-castillo
View
63
Download
0
Tags:
Embed Size (px)
Citation preview
5/27/2018 Stored Procedure G5
1/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
1
PROCEDIMIENTOS ALMACENADOS EN UNA CONEXION JAVA-BD
1. INTRODUCCINHay varias formas de interactuar con una base de datos:
Procedimiento almacenado. Propio de cada SGBD (Sistema Gestor de Bases de Datos). JDBC (Java Database Connectivity). Estndar. Y ampliamente extendido. SQLJ (SQL para Java). Estndar pero no totalmente extendido.
Para todo esto utili zaremos JDeveloper, que es un entorno de desarrollo para Oracle. Pero
antes de empezar con JDeveloper es bueno saber trabajar con las tecnologas
correspondientes sin necesidad de entorno.
2. DEFINICINUn procedimiento almacenado es un programa o procedimiento el cual es almacenado
fsicamente en una base de datos. Su implementacin vara de un gestor de bases de datos a
otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una
peticin del usuario, es ejecutado directamente en el motor de base de datos, el cual
usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que
necesita manipular y slo necesita enviar los resultados de regreso al usuario, deshacindose
de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
Los procedimientos almacenados y funciones son nuevas funcionalidades de la versin deMySQL 5.0. Un procedimiento almacenado en esencia es un conjunto de comandos SQL que
pueden almacenarse en el servidor. Una vez que se hace, los clientes no necesitan relanzar los
comandos individuales pero pueden en su lugar referirse al procedimiento almacen ado.
3. CARACTERSTICASEn las bases de datos que utili zan procedimientos almacenados, se puede identificar las
siguientes caractersticas:
Programacin modular Distribucin del trabajo Seguridad a la base de datos Ejecucin ms rpida Reduccin del trfico
5/27/2018 Stored Procedure G5
2/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
2
4. VENTAJAS Los procedimientos almacenados pueden mejorar el rendimiento ya que se necesita
enviar menos informacin entre el servidor y el cliente. El intercambio que hay es que
aumenta la carga del servidor de la base de datos ya que la mayora del trabajo se
realiza en la parte del servidor y no en el cliente. Se debe considerar esto si muchas
mquinas cliente (como servidores Web) se sirven a slo uno o pocos servidores de
bases de datos.
Los procedimientos almacenados le permiten tener bibliotecas o funciones en elservidor de base de datos. Esta caracterstica es compartida por los lenguajes de
programacin modernos que permiten este diseo interno, por ejemplo, usando
clases. Usando estas caractersticas del lenguaje de programacin cliente es
beneficioso para el programador incluso fuera del entorno de la base de datos.
El control del motor del gestor de bases de datos, que corre generalmente en unservidor distinto del gestor de bases de datos aumentando con ello la rapidez deprocesamiento de las peticiones del gestor de bases de datos. El servidor de la base de
datos tiene acceso directo a los datos necesarios para manipular y slo necesita enviar
el resultado final al usuario.
Permitir que la lgica del negocio se encuentre como un API en la base de datos, quepueden simplificar la gestin de datos y reducir la necesidad de codificar la lgica en el
resto de los programas cliente. Esto puede reducir la probabilidad de que los datos se
corrompan por el uso de programas clientes defectuosos o errneos. De este modo, el
motor de base de datos puede asegurar la integridad de los datos y su consistencia.
Es reutilizable en el sentido de que se puede reutilizar una versin compilada delprocedimiento para ejecutar una operacin de base de datos varias veces.
5. USOSAlgunas situaciones en que los procedimientos almacenados pueden ser particularmente
tiles:
Cuando mltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan endistintas plataformas, pero necesitan realizar la misma operacin en la base de datos.
Cuando la seguridad es muy importante. Los bancos, por ejemplo, usanprocedimientos almacenados para todas las operaciones comunes. Esto proporciona
un entorno seguro y consistente, y los procedimientos pueden asegurar que cada
operacin se loguea apropiadamente. En tal entorno, las aplicaciones y los usuarios no
obtendran ningn acceso directo a las tablas de la base de datos, slo pueden
ejecutar algunos procedimientos almacenados.
Los procedimientos almacenados le permiten tener bibliotecas o funciones en elservidor de base de datos. Esta caracterstica es compartida por los lenguajes de
programacin modernos que permiten este diseo interno, por ejemplo, usando
clases. Usando estas caractersticas del lenguaje de programacin cliente esbeneficioso para el programador incluso fuera del entorno de la base de datos.
5/27/2018 Stored Procedure G5
3/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
3
6. PROCEDIMIENTOS ALMACENADOS EN JAVA: Los pasos para almacenar un procedimiento Java son: Codificar una clase Java con el mtodo deseado. Cargar el mtodo Java en el SGBD y resolver las referencias externas. Hacer pblico el mtodo Java en el SGBD, mediante una especificacin PL/SQL. Asignar los permisos necesarios para invocar al procedimiento. Invocar al procedimiento, bien desde SQL o desde PL/SQL.
Los procedimientos almacenados y rutinas se crean con comandos CREATE PROCEDUREy
CREATE FUNCTION. Una rutina es un procedimiento o una funcin. Un procedimiento se
invoca usando un comando CALL, y slo puede pasar valores usando variables de salida. Una
funcin puede llamarse desde dentro de un comando como cualquier otra funcin (esto es,
invocando el nombre de la funcin), y puede retornar un valor escalar. Las rutinas
almacenadas pueden llamar otras rutinas almacenadas.
Desde MySQL 5.0.1, los procedimientos almacenados o funciones se asocian con una base de
datos. Esto tiene varias implicaciones:
Cuando se invoca la rutina, se realiza implcitamente USE db_name (y se deshace cuando
acaba la rutina). Los comandos USE dentro de procedimientos almacenados no se permiten.
Puede calificar los nombres de rutina con el nombre de la base de datos. Esto puede usarse
para referirse a una rutina que no est en la base de datos actual. Por ejemplo, para invocar
procedimientos almacenados p o funciones f esto se asocia con la base de datos test, puede
decir CALL test.p() o test.f().
Cuando se borra una base de datos, todos los procedimientos almacenados asociados con ella
tambin se borran.
5/27/2018 Stored Procedure G5
4/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
4
(En MySQL 5.0.0, los procedimientos almacenados son globales y no asociados con una base
de datos. Heredan la base de datos por defecto del llamador. Si se ejecuta USE db_name desde
la rutina, la base de datos por defecto original se restaura a la salida de la rutina.)
MySQL soporta la extensin muy til que permite el uso de comandos regulares SELECT (esto
es, sin usar cursores o variables locales) dentro de los procedimientos almacenados. Elconjunto de resultados de estas consultas se enva directamente al cliente. Comandos SELECT
mltiples generan varios conjuntos de resultados, as que el cliente debe usar una biblioteca
cliente de MySQL que soporte conjuntos de resultados mltiples. Esto significa que el cliente
debe usar una biblioteca cliente de MySQL como mnimos desde 4.1.
La siguiente seccin describe la sintaxis usada para crear, alterar, borrar, y consultar
procedimientos almacenados y funciones.
CREATE PROCEDURE y CREATE FUNCTION ALTER PROCEDURE y ALTER FUNCTION DROP PROCEDURE y DROP FUNCTION SHOW CREATE PROCEDURE y SHOW CREATE FUNCTION SHOW PROCEDURE STATUS y SHOW FUNCTION STATUS La sentencia CALL Sentencia compuesta BEGIN ... END Sentencia DECLARE Variables en procedimientos almacenados Conditions and Handlers Cursores Constructores de control de flujo
7. SINTXIS DE PROCEDIMIENTOS ALMACENADOS EN MySQL7.1 CREATE PROCEDURE Y CREATE FUNCTION
Para crear una rutina, es necesario tener el permiso CREATE ROUTINE, y los permisos ALTER
ROUTINEy EXECUTEse asignan automticamente a su creador. Si se permite logueo binario
necesita tambin los permisos SUPERcomo se describe enSeccin 19.3, Registrobinario de
procedimientos almacenados y disparadores. Por defecto, la rutina se asocia con la base de
datos actual. Para asociar la rutina explcitamente con una base de datos, especifique el
nombre como db_name.sp_nameal crearlo.
Si el nombre de rutina es el mismo que el nombre de una funcin de SQL, necesita usar un
espacio entre el nombre y el siguiente parntesis al definir la rutina, o hay un error de sintaxis.
Esto tambin es cierto cuando invoca la rutina posteriormente.
La clusula RETURNSpuede especificarse slo con FUNCTION, donde es obligatorio. Se usa
para indicar el tipo de retorno de la funcin, y el cuerpo de la funcin debe contener un
comando RETURN value.
La lista de parmetros entre parntesis debe estar siempre presente. Si no hay parmetros, se
debe usar una lista de parmetros vaca (). Cada parmetro es un parmetro INpor defecto.
http://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.html5/27/2018 Stored Procedure G5
5/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
5
Para especificar otro tipo de parmetro, use la palabra clave OUTo INOUTantes del nombre
del parmetro. Especificando IN, OUT, o INOUT slo es vlido para una PROCEDURE.
El comando CREATE FUNCTIONse usa en versiones anteriores de MySQL para soportar UDFs
(User Defined Functions) (Funciones Definidas por el Usuario). Consulte Seccin 27.2, Aadir
nuevas funciones a MySQL.UDFs se soportan, incluso con la existencia de procedimientos
almacenados. Un UDF puede tratarse como una funcin almacenada externa. Sin embargo,
tenga en cuenta que los procedimientos almacenados comparten su espacio de nombres con
UDFs.
Un marco para procedimientos almacenados externos se introducir en el futuro. Esto
permitira escribir procedimientos almacenados en lenguajes distintos a SQL. Uno de los
primeros lenguajes a soportar ser PHP ya que el motor central de PHP es pequeo, con flujos
seguros y puede empotrarse fcilmente. Como el marco es pblico, se espera soportar muchos
otros lenguajes.
Un procedimiento o funcin se considera deterministasi siempre produce el mismo
resultado para los mismos parmetros de entrada, y nodeterministaen cualquier otro caso.
Si no se da ni DETERMINISTICni NOT DETERMINISTICpor defecto es NOT DETERMINISTIC.
Para replicacin, use la funcin NOW() (o su sinnimo) o RAND() no hace una rutina no
determinista necesariamente. Para NOW(), el log binario incluye el tiempo y hora y replica
correctamente. RAND() tambin replica correctamente mientras se invoque slo una vez
dentro de una rutina. (Puede considerar el tiempo y hora de ejecucin de la rutina y una
semilla de nmero aleatorio como entradas implcitas que son idnticas en el maestro y el
esclavo.)
Actualmente, la caracterstica DETERMINISTICse acepta, pero no la usa el optimizador. Sin
embargo, si se permite el logueo binario, esta caracterstica afecta si MySQL acepta definicinde rutinas. ConsulteSeccin 19.3, Registro binario de procedimientos almacenados y
disparadores.
Varias caractersticas proporcionan informacin sobre la naturaleza de los datos usados por la
rutina. CONTAINS SQLindica que la rutina no contiene comandos que leen o escriben
datos. NO SQLindica que la rutina no contiene comandos SQL. READS SQL DATAindica que la
rutina contiene comandos que leen datos, pero no comandos que escriben datos. MODIFIES
SQL DATA indica que la rutina contiene comandos que pueden escribir datos. CONTAINS
SQLes el valor por defecto si no se dan explcitamente ninguna de estas caractersticas.
La caracterstica SQL SECURITYpuede usarse para especificar si la rutina debe ser ejecutada
usando los permisos del usuario que crea la rutina o el usuario que la invoca. El valor pordefecto es DEFINER. Esta caracterstica es nueva en SQL:2003. El creador o el invocador deben
tener permisos para acceder a la base de datos con la que la rutina est asociada. Desde
MySQL 5.0.3, es necesario tener el permiso EXECUTEpara ser capaz de ejecutar la rutina. El
usuario que debe tener este permiso es el definidor o el invocador, en funcin de cmo la
caracterstica SQL SECURITY.
MySQL almacena la variable de sistema sql_modeque est en efecto cuando se crea la rutina,
y siempre ejecuta la rutina con esta inicializacin.
La clusula COMMENTes una extensin de MySQL, y puede usarse para describir el
procedimiento almacenado. Esta informacin se muestra con los comandos SHOW CREATE
PROCEDUREy SHOW CREATE FUNCTION.
http://dev.mysql.com/doc/refman/5.0/es/adding-functions.htmlhttp://dev.mysql.com/doc/refman/5.0/es/adding-functions.htmlhttp://dev.mysql.com/doc/refman/5.0/es/adding-functions.htmlhttp://dev.mysql.com/doc/refman/5.0/es/adding-functions.htmlhttp://dev.mysql.com/doc/refman/5.0/es/adding-functions.htmlhttp://dev.mysql.com/doc/refman/5.0/es/adding-functions.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/stored-procedure-logging.htmlhttp://dev.mysql.com/doc/refman/5.0/es/adding-functions.htmlhttp://dev.mysql.com/doc/refman/5.0/es/adding-functions.html5/27/2018 Stored Procedure G5
6/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
6
MySQL permite a las rutinas que contengan comandos DDL (tales como CREATEy DROP) y
comandos de transaccin SQL (como COMMIT). Esto no lo requiere el estndar, y por lo tanto,
es especfico de la implementacin.
Los procedimientos almacenados no pueden usar LOAD DATA INFILE.
7.2 DROP PROCEDURE y DROP FUNCTION
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name
Este comando se usa para borrar un procedimiento o funcin almacenada. Esto es, la rutina
especificada se borra del servidor. Debe tener el permiso ALTER ROUTINE para las rutinas
desde MySQL 5.0.3. Este permiso se otorga automticamente al creador de la rutina.
La clusula IF EXISTS es una extensin de MySQL . Evita que ocurra un error si la funcin o
procedimiento no existe. Se genera una advertencia que puede verse con SHOW WARNINGS.
7.3 SHOW CREATE PROCEDURE y SHOW CREATE FUNCTION
SHOW CREATE {PROCEDURE | FUNCTION} sp_name
Este comando es una extensin de MySQL . Similar a SHOW CREATE TABLE, retorna la cadena
exacta que puede usarse para recrear la rutina nombrada.
Ejemplo:
mysql> SHOW CREATE FUNCTION test.hello\G
*************************** 1. row ***************************
Function: hello
sql_mode:
Create Function: CREATE FUNCTION test`.`hello`(s CHAR(20)) RETURNS CHAR(50)
RETURN CONCAT('Hello, ',s,'!')
7.4 SHOW PROCEDURE STATUS Y SHOW FUNCTION STATUS
SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
Este comando es una extensin de MySQL . Retorna caractersticas de rutinas, como el nombre
de la base de datos, nombre, tipo, creador y fechas de creacin y modificacin. Si no se
especifica un patrn, le lista la informacin para todos los procedimientos almacenados, en
funcin del comando que use.
mysql> SHOW FUNCTION STATUS LIKE 'hello'\G
*************************** 1. row ***************************
Db: testName: hello
5/27/2018 Stored Procedure G5
7/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
7
Type: FUNCTION
Definer: testuser@localhost
Modified: 2004-08-03 15:29:37
Created: 2004-08-03 15:29:37
Security_type: DEFINER
Comment: Tambin puede obtener informacin de rutinas almacenadas de la tablaROUTINES en INFORMATION_SCHEMA.
7.5 LA SENTENCIA CALL
CALL sp_name([parameter[,...]])
El comando CALL invoca un procedimiento definido previamente con CREATE PROCEDURE.
CALL puede pasar valores al llamador usando parmetros declarados como OUT o INOUT.
Tambin retorna el nmero de registros afectados, que con un programa cliente puede
obtenerse a nivel SQL llamando la funcin ROW_COUNT() y desde C llamando la funcin de la
API C mysql_affected_rows() .
7.6 SENTENCIA COMPUESTA BEGIN... END
[etiqueta_inicio:] BEGIN
[lista_sentencias]
END [etiqueta_fin]
La sintaxis BEGIN ... END se utiliza para escribir sentencias compuestas que pueden aparecer
en el interior de procedimientos almacenados y triggers. Una sentencia compuesta puede
contener mltiples sentencias, encerradas por las palabras BEGIN y END. lista_sentencias es
una lista de una o ms sentencias. Cada sentencia dentro de lista_sentencias debe terminar
con un punto y como (;) delimitador de sentencias. lista_sentencias es opcional, lo que
significa que la sentencia compuesta vaca (BEGIN END es correcta.
El uso de mltiples sentencias requiere que el cliente pueda enviar cadenas de sentencias que
contengan el delimitador ;. Esto se gestiona en el cliente de l nea de comandos mysql con el
comando delimiter. Cambiar el delimitador de fin de sentencia; (por ejemplo con //) permite
utilizar; en el cuerpo de una rutina. Vase por ejemplo Seccin 19.2.1, CREATE PROCEDURE y
CREATE FUNCTION.
Un comando compuesto puede etiquetarse. No se puede poner end_label a no ser que
tambin est presente begin_label , y si ambos estn, deben ser iguales.
La clusula opcional [NOT] ATOMIC no est soportada todava. Esto significa que no hay un
punto transaccional al inicio del bloque de instrucciones y la clusula BEGIN usada en este
contexto no tiene efecto en la transaccin actual.
5/27/2018 Stored Procedure G5
8/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
8
7.7 SENTENCIA DECLARE
El comando DECLARE se usa para definir varios iconos locales de una rutina: las variables
locales (consulte Seccin 19.2.9, Variables en procedimientos almacenados), condiciones y
handlers (consulte Seccin 19.2.10, Conditions and Handlers) y cursores (consulte Seccin
19.2.11, Cursores). Los comandos SIGNAL y RESIGNAL no se soportan en la actualidad.
DECLARE puede usarse slo dentro de comandos compuestos BEGIN ... END y deben ser su
inicio, antes de cualquier otro comando.
Los cursores deben declararse antes de declarar los handlers, y las variables y condiciones
deben declararse antes de declarar los cursores o handlers.
7.8 VARIABLES EN PROCEDIMIENTOS ALMACENADOS
Declarar variables locales con DECLARE Sentencia SET para variables La sentencia SELECT ... INTO
7.8.1 DECLARAR VARIABLES LOCALES CON DECLARE
DECLARE var_name[,...] type [DEFAULT value]
Este comando se usa para declarar variables locales. Para proporcionar un valor por defecto
para la variable, incluya una clusula DEFAULT. El valor puede especificarse como expresin,
no necesita ser una constante. Si la clusula DEFAULT no est presente, el valor inicial es NULL.
La visibilidad de una variable local es dentro del bloque BEGIN ... END donde est declarado.
Puede usarse en bloques anidados excepto aqullos que declaren una variable con el mismo
nombre.
7.8.2 SENTENCIA SET PARA VARIABLESSET var_name = expr [, var_name = expr] ...
El comando SET en procedimientos almacenados es una versin extendida del comando
general SET. Las variables referenciadas pueden ser las declaradas dentro de una rutina, o
variables de servidor globales.
El comando SET en procedimientos almacenados se implementa como parte de la sintaxis SET
pre-existente. Esto permite una sintaxis extendida de SET a=x, b=y,... donde distintos tipos de
variables (variables declaradas local y globalmente y variables de sesin del servidor) pueden
mezclarse. Esto permite combinaciones de variables locales y algunas opciones que tienensentido slo para variables de sistema; en tal caso, las opciones se reconocen pero se ignoran.
5/27/2018 Stored Procedure G5
9/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
9
7.8.3 LA SENTENCIA SELECT ... INTO
SELECT col_name[,...] INTO var_name[,...] table_expr
Esta sintaxis SELECT almacena columnas seleccionadas directamente en variables. Por lo tanto,
slo un registro puede retornarse.
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
7.9 CONDITIONS AND HANDLERS
Condiciones DECLARE DECLARE handlers
Ciertas condiciones pueden requerir un tratamiento especfico. Estas condiciones pueden estar
relacionadas con errores, as como control de flujo general dentro de una rutina.
7.9.1 CONDICIONES DECLARE
DECLARE condition_name CONDITION FOR condition_value
condition_value:
SQLSTATE [VALUE] sqlstate_value
| mysql_error_code
Este comando especifica condiciones que necesitan tratamiento especfico. Asocia un nombre
con una condicin de error especfica. El nombre puede usarse subsecuentemente en un
comando DECLARE HANDLER.
7.9.2 DECLARE HANDLERS
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
handler_type:
CONTINUE
| EXIT
| UNDO
condition_value:
SQLSTATE [VALUE] sqlstate_value
| condition_name
| SQLWARNING
| NOT FOUND
| SQLEXCEPTION
| mysql_error_code
Este comando especifica handlers que pueden tratar una o varias condiciones. Si una de estas
condiciones ocurre, el comando especificado se ejecuta.
5/27/2018 Stored Procedure G5
10/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
10
Para un handler CONTINUE , contina la rutina actual tras la ejecucin del comando del
handler. Para un handler EXIT , termina la ejecucin del comando compuesto BEGIN...END
actual. El handler de tipo UNDO todava no se soporta.
SQLWARNING es una abreviacin para todos los cdigos SQLSTATE que comienzan con01.
NOT FOUND es una abreviacin para todos los cdigos SQLSTATE que comienzan con02.
SQLEXCEPTION es una abreviacin para todos los cdigos SQLSTATE no tratados porSQLWARNING o NOT FOUND.
Adems de los valores SQLSTATE, los cdigos de error MySQL se soportan.
7.10 CURSORES
Se soportan cursores simples dentro de procedimientos y funciones almacenadas. La sintaxis
es la de SQL empotrado. Los cursores no son sensibles, son de slo lectura, y no permiten
scrolling. No sensible significa que el servidor puede o no hacer una copia de su tabla de
resultados.
Los cursores deben declararse antes de declarar los handlers, y las variables y condiciones
deben declararse antes de declarar cursores o handlers.
Declarar cursores Sentencia OPEN del cursor Sentencia de cursor FETCH Sentencia de cursor CLOSE
7.10.1 DECLARAR CURSORES
DECLARE cursor_name CURSOR FOR select_statement
Este comando declara un cursor. Pueden definirse varios cursores en una rutina, pero cada
cursor en un bloque debe tener un nombre nico.
El comando SELECT no puede tener una clusula INTO.
7.10.2 SENTENCIA OPEN DEL CURSOR
OPEN cursor_name
Este comando abre un cursor declarado previamente.
5/27/2018 Stored Procedure G5
11/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
11
7.10.3 SENTENCIA DE CURSOR FETCH
FETCH cursor_name INTO var_name [, var_name] ...
Este comando trata el siguiente registro (si existe) usando el cursor abierto que se especifique,
y avanza el puntero del cursor.
Si no existen ms registros disponibles, ocurrir una condicin de Sin Datos con el valor
SQLSTATE 02000. Puede configurar un manejador (handler) para detectar esta condicin (o
para una condicin NOT FOUND).
7.10.4 SENTENCIA DE CURSOR CLOSE
CLOSE cursor_name
Este comando cierra un cursor abierto previamente.
Si no se cierra explcitamente, un cursor se cierra al final del comando compuesto en que se
declara.
7.11 CONSTRUCTORES DE CONTROL DE FLUJO
Sentencia IF
La sentencia CASE Sentencia LOOP Sentencia LEAVE La sentencia ITERATE Sentencia REPEAT Sentencia WHILE
Los constructores IF, CASE, LOOP, WHILE, ITERATE, y LEAVE estn completamente
implementados.
Estos constructores pueden contener un comando simple, o un bloque de comandos usando el
comando compuesto BEGIN ... END. Los constructores pueden estar anidados.
Los bucles FOR no estn soportados.
7.11.1 SENTENCIA IF
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
5/27/2018 Stored Procedure G5
12/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
12
IF implementa un constructor condicional bsico. Si search_condition se evala a cierto, el
comando SQL correspondiente listado se ejectua. Si no coincide ninguna search_condition se
ejecuta el comando listado en la clusula ELSE. statement_list puede consistir en varios
comandos.
Tenga en cuenta que tambin hay una funcin IF(), que difiere del commando IF descrito aqu.
7.11.2 LA SENTENCIA CASE
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]END CASE
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
El comando CASE para procedimientos almacenados implementa un constructor condicional
complejo. Si una search_condition se evala a cierto, el comando SQL correspondiente se
ejecuta. Si no coincide ninguna condicin de bsqueda, el comando en la clusula ELSE seejecuta.
7.11.3 SENTENCIA LOOP
[begin_label:] LOOP
statement_list
END LOOP [end_label]
LOOP implementa un constructor de bucle simple que permite ejecucin repetida de
comandos particulares. El comando dentro del bucle se repite hasta que acaba el bucle,
usualmente con un comando LEAVE .
Un comando LOOP puede etiquetarse. end_label no puede darse hasta que est presente
begin_label , y si ambos lo estn, deben ser el mismo.
3.11.4 SENTENCIA LEAVE
LEAVE label
5/27/2018 Stored Procedure G5
13/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
13
Este comando se usa para abandonar cualquier control de flujo etiquetado. Puede usarse con
BEGIN ... END o bucles.
7.11.5 LA SENTENCIA ITERATE
ITERATE label
ITERATE slo puede aparecer en comandos LOOP, REPEAT, y WHILE . ITERATE signi fica vuelve
a hacer el bucle.
Por ejemplo:
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
SET @x = p1;
END
7.11.6 SENTENCIA REPEAT
[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]
El comando/s dentro de un comando REPEAT se repite hasta que la condicin
search_condition es cierta.
Un comando REPEAT puede etiquetarse. end_label no puede darse a no ser que begin_label
est presente, y si lo estn, deben ser el mismo.
7.11.7 SENTENCIA WHILE
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
El comado/s dentro de un comando WHILE se repite mientras la condicin search_condition es
cierta.
5/27/2018 Stored Procedure G5
14/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
14
Un comando WHILE puede etiquetarse. end_label no puede darse a no ser que begin_label
tambin est presente, y si lo estn, deben ser el mismo.
8. PROCEDIMIENTOS ALMACENADOS EN UNA CONEXIN JDBC8.1 DriverManager
La clase DriverManager implementa la capa de gestin de JDBC, y trabaja como intermediaria
entre el usuario y los drivers. Guarda la lista de los drivers que estn disponibles y establece la
conexin entre la base de datos y el driver apropiado.
Adems la clase DriverManager se ocupa de cosas cmo gestionar los lmites de tiempo de
login en el driver y de la salida de los mensajes de traza y log.
Para aplicaciones simples, el nico mtodo en esta clase que necesita un programador generalpara su uso directamente es DriverManager.getConnection.
Como su nombre indica, este mtodo establece una conexin con la base de datos.
JDBC permite al usuario llamar a los mtodos de DriverManager getDriver, getDrivers y
registerDriver as como al mtodo de Driver connect, pero en la mayora de los casos es
preferible dejar que la clase DriverManager gestione los detalles al establecer la conexin.
8.2 ESTABLECER UNA CONEXIN.
Una vez que la clase Driver ha sido cargada y registrada con la clase DriverManager, se est en
condiciones de establecer la conexin con la base de datos. La solicitud de la conexin se
realiza mediante una llamada al mtodo
DriverManager.getConnection, y DriverManager testea los drivers regsitrados para ver si
puede establecer la conexin.
A veces puede darse el caso de que ms de un driver JDBC pueda establecer la conexin para
una URL dada.
El orden en que los driver son testeados es significante porque DriverManager usar el primer
driver que encuentre que pueda conectar con xito a la base de datos.
Primero DriverManager intenta usar cada driver en el orden en que ha sido registrado.
Testea los drivers mediante la llamada al mtodo Driver.connect cada uno por turno,
pasndole como argumento la URL que el usuario ha pasado originalmente al mtodo
DriverManager.getConnection. El primer driver que reconozca la URL realiza la conexin.
5/27/2018 Stored Procedure G5
15/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
15
8.3 Statement
Un objeto Statement se usa para enviar sentencias SQL a la base de datos.
Actualmente hay tres tipos de objetos Statement, todos los cuales actan como contenedores
para la ejecucin de sentencias en una conexin dada: Statement, PreparedStatement quehereda de Statement y CallableStatement que hereda de PreparedStatement.
Ejecucin de sentencias usando objetos Statement
La interfaz Statement nos suministra tres mtodos diferentes para ejecutar sentencias SQL:
executeQuery executeUpdate execute
El mtodo a usar est determinado por el producto de la sentencia SQL.
El mtodo executeQueryest diseado para sentencias que producen como resultadoun nico result set tal como las sentencias SELECT.
El mtodo executeUpdatese usa para ejecutar sentencias INSERT, UPDATE o DELETEas como sentencias SQL DDL (Data Definition Language) como CREATE TABLE o DROP
TABLE. El efecto de una sentencia INSERT, UPDATE o DELETE es una modificacin de
una o ms columnas en cero o ms filas de una tabla. El valor devuelto de
executeUpdate es un entero que indica el nmero de filas que han sido afectadas
(referidos como update count).
Para sentencias tales como CREATE TABLE o DROP TABLE, que no operan sobre filas, elvalor devuelto por executeUpdate es siempre cero.
El mtodo executedebera usarse solamente para ejecutar sentencias que devuelvenms de un result set, ms que un update count o una combinacin de ambos.
Cerrar objetos Statement
Los objetos Statement se cerrarn automticamente por el colector de basura de Java
(garbage collector). No obstante se recomienda como una buena prctica de programacin
que se cierren explcitamente cuando no sean ya necesarios.
8.4 ResultSet
Un 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 mtodos get
que permiten el acceso a las diferentes columnas de la fi las. El mtodo ResultSet.next se usa
para moverse a la siguiente fi la del result set, convirtiendo a sta en la fila actal.
5/27/2018 Stored Procedure G5
16/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
16
El formato general de un result set es una tabla con cabeceras de columna y los valores
correspondientes devueltos por la query
Filas y Cursores
Un ResultSet mantiene un cursor que apunta a la fila actual de datos. El cursor se mueve unafila hacia abajo cada vez que se llama al mtodo next. Inicialmente se sita antes de la primera
fila, por lo que hay que llamar al mtodo next para situarlo en la primera fila convirtindola en
la fila actual. Las filas de ResultSet se recuperan en secuencia desde la fila ms alta a la ms
baja.
Un cursor se mantiene vlido hasta que el objeto Resultset o su objeto padre Statement se
cierra.
Columnas
Los mtodos getInt(nombrecolumna), getChar(nombrecolumna), etc, suministran losmedios para recuperar los valores de las columnas de la fila actual.
Dentro de cada fila, los valores de las columnas pueden recuperarse en cualquier orden, pero
para asegurar la mxima portabilidad, deberan extraerse las columnas de izquierda a derecha
y leer los valores de las columnas una nica vez.
Si no estamos seguros del tipo de la columna, podemos usar el mtodo getObject().
Puede usarse o bien el nombre de la columna o el nmero de columna para referirse a esta.
Si, por otro lado, la sentencia select no especifica nombres de columnas (tal como en select *from table1 o en casos donde una columna es deri vada), deben usarse los nmeros de
columna. En estas situaciones, no hay forma de que el usuario sepa con seguridad cuales son
los nombres de las columnas.
8.5 PreparedStatement
La interfaz preparedStatement hereda de statement y difiere de esta en dos maneras.
Las instancias de preparedStatement contienen una sentencia SQL que ya ha sidocompilada. Esto es lo que hace que se llame preparada".
La sentencia SQL contenida en un objeto PreparedStatement pueden tener uno o msparmetros IN. Un parmetro IN e s aquel cuyo valor no se especifica en la sentencia
SQL cuando se crea. En vez de ello la sentencia tiene un interrogante (?) como un
encaje para cada parmetro IN. Debe suministrarse un valor para cada interrogante
mediante el mtodo apropiado setInt, setString, etc, antes de ejecutar la sentencia.
Como los objetos PreparedStatement estn precompilados, su ejecucin es ms rpida que los
objetos Statement. Consecuentemente, una sentencia SQL que se ejecute muchas veces a
menudo se crea como PreparedStatement para incrementar su eficacia.
5/27/2018 Stored Procedure G5
17/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
17
Siendo una subclase de Statement, PreparedStatement hereda toda la funcionalidad de
Statement. Adems, se aade un set completo de mtodos necesarios para fijar los valores
que van a ser enviados a la base de datos en e l lugar de los encajes para los parmetros IN.
Tambin se modifican los tres mtodos execute, executeQuery y executeUpdate de tal forma
que no toman argumentos. Los formatos de Statement de estos mtodos (los formatos que
toman una sentencia SQL como argumento) no deberan usarse nunca con objetos
PreparedStatement.
9. ACCESO A PROCEDIMIENTOS ALMACENADOSLas llamadas a procedimientos almacenados son gestionadas por un tipo especial de
sentencia: CallableStatement.
Se obtienen enviando a la conexin el mensaje prepareCall({call nombre_proc(?, ?, ?)})
Los parmetros de entrada se gestionan igual que en una PreparedStatement.
Los parmetros de salida deben registrarse antes de la llamada, con:
registerOutParameter(pos, tipo).
Los tipos de los parmetros se toman de la clase java.sql.Types
La invocacin se hace con executeUpdate().
Una vez ejecutada la llamada, los parmetros de salida se obtienen con getTipo(pos), tal y
como si se tratara de un ResultSet (pero sin next()).
Caso de llamar a una funcin, se hace: prepareCall({ ?= call nombre_proc(?, ?, ?)}) donde el
1er se trata como un parmetro de salida.
9.1 CallableStatement
Un objeto CallableStatement provee de una forma estndar de llamar a procedimientos
almacenados de la base de datos. Un procedimiento almacenado se encuentra en la base de
datos. La llamada al procedimiento es lo que contiene el objeto CallableStatement. Esta
llamada se escribe en una sintaxis de escape que puede tomar una de dos formas: un formato
con un parmetro resultado y el otro sin l. (Ver la seccin 4 para ms informacin sobre la
sintaxis de escape).
Un parmetro resultado, un tipo de parmetro OUT, es el valor devuelto por el procedimiento
almacenado. Ambos formatos pueden tener un nmero variable de parmetros de entrada
(parmetros IN), de salida (parmetros OUT) o ambos (parmetros INOUT). Un interrogante
sirve como anclaje para cada parmetro.
La sintaxis para invocar un procedimiento almacenado en JDBC se muestra a continuacin:
Notar que los corchetes indican que lo que se encuentra contenido en ellos es opcional, no
forma parte de la sintaxis.
{call procedure_name[(?, ?, ...)]}
5/27/2018 Stored Procedure G5
18/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
18
La sintaxis para un procedimiento que devuelve un resultado es:
{? = call procedure_name[(?, ?, ...)]}
La sintaxis para un procedimiento almacenado sin parmetros se parece a algo como:
{call procedure_name}
Normalmente, alquien que crea un objeto CallableStatement debera saber ya si la DBMS que
est usando soporta o no procedimientos almacenados y que son estos. Si alguien necesita
chequearlo de cualquier modo, existen varios mtodos de DatabaseMetaData que suministran
tal informacin. Por ejemplo, el mtodo supportsStoredProcedures devolver true si la DBMS
soporta llamadas a procedimientos almacenados y el mtodo getProcedures devolver una
descripcin de los procedimientos almacenados disponibles.
CallableStatement hereda los mtodos de Statement, los cuales tratan sentencias SQL en
general, y tambin hereda los mtodos de PreparedStatement, que tratan los parmetros IN.Todos los mtodos definidos para CallableStatement tratan los parmetros OUT o los aspectos
de salida de los parmetros INOUT: registro de los tipos JDBC (tipos genricos SQL) de los
parmetros OUT, recuperacin de valores desde ellos o chequear si el valor devuelto es un
JDBC NULL.
10.EJEMPLOS DE PROCEDIMIENTOS ALMACENADOS Ejemplo 01:
Mediante este procedimiento almacenado, asumimos una tabla de productos de una base dedatos ya creada en SQL, en este caso arrojar parmetros de salida. La cual mostrar el
precio_compra de la tabla anteriormente creada:
Una vez finalizado el procedimiento almacenado nos arrojar precio compra de la tabla
productos.
Ejemplo 02:En este ejemplo, se muestra un procedimiento almacenado que devuelve valores utilizando la
instruccin RETURN. Se asume una tabla facturas de una base de datos SQL de un negocio.
CREATE PROCEDURE ObtenerPreciocompra
@Nombre nchar (20),
@precio_compra nchar(10)
Output
AS
BEGIN
SELECT @Nombre = NOMBRE
FROM ProductosWHERE PREC_COMPRA = @preci o_compra
END
DECLARE @precio_compra nchar (10)
EXEC ObtenerPreciocompra
'200700000001', @saldo output
PRINT @precio_compra
5/27/2018 Stored Procedure G5
19/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
19
Mostramos el resultado de los anteriores cdigos:
Ejemplo 03:Este procedimiento almacenado permitir insertar un registro en una tabla clientes que
asumimos que ha sido creada en una base de datos SQL.
Se hace la e jecucin del procedimiento almacenado:
CREATE PROCEDURE regresarfactura @fecha varchar
(20)
AS
BEGIN
IF(SELECT
id_ventaFROM
FACTURASWHERE fecha = @fecha) =marzo
BEGIN
RETURN 1END
ELSE
RETURN 0
END
DECLARE @valor int
EXEC @valor = regresarfactura 'tr01'
PRINT@valor
createprocedureagregarregistro
@id_prod nchar(10),
@Nombre nchar(19),
@precio_vta nchar(10),
@precio_compra,
@Descripcion nchar(10),
@id_prov nchar(10),stock nchar(10),
@foto nchar(10),
@redes nchar(20)
AS
INSERT INTO CLIENTES
(id_prod,Nombre,precio_vta,precio_compra,Descripcion,id_prov,st
ock,foto,redes) values
(@id_prod,@Nombre,@precio_vta,@precio_compra,@Descripcion,@id_p
rov,@stock,@foto,@redes)
EXEC agregacliente 'Rafael', 'Quintana', 'Herrada '
5/27/2018 Stored Procedure G5
20/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
20
Ejemplo 04:Mediante este proceso almacenado, veremos la tabla Garantas de nuestra base de datos ya
creada en SQL, en este proceso almacenado arrojara parmetros de salida. La cual mostrara el
Folio_garantia de la tabla anteriormente mencionada.
Una vez finalizado el procedimiento almacenado nos arrojara el precio_compra de la tabla
productos.
11.EJEMPLO INTEGRADOR: SISTEMA DE MANTENIMIENTO DE DATOS DEEMPLEADOS
11.1 INSTALACIN Y CONFIGURACIN DE MySQL
CREATE PROCEDURE
Obtenerfolio @folio_gar
nchar (20),
@Folio_fact nchar(10)
Output
AS
BEGIN
SELECT @Folio_gar = Folio_garantia
FROM Garantias
WHERE FOLIOFACT = @foli o_factEND
DECLARE @Folio_garantia nchar (10)
EXEC Obtenerfolio 'g123',
@folio_fact output
PRINT @folio_fact
5/27/2018 Stored Procedure G5
21/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
21
5/27/2018 Stored Procedure G5
22/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
22
11.2 CONECTAR JAVAMySQL UTILIZANDO CONNECTOR MySQL
Verificar que el Conector JDBC est disponible en el Netbeans
El Connector JDBC para MySQL es un driver que se comunica desde nuestro IDE Netbeans con
la base de datos especificada en MySQL, no se debe descargar este driver porque el NetBeans
lo trae, solamente debes aadirlo a tu proyecto desde las librerias globales...en caso quieras
verificar por ti mismo, pues entonces dentro de tu proyecto ve a Tools-->ant Libraries y ahi
estara la libreria MySQL JDBC Driver tal como muestro en las figuras:
Buscamos las libreras globales de NetBeans disponibles para nuestro proyecto y buscamos la
http://3.bp.blogspot.com/-Q_XoUzyiFTU/UQfPYrXDUwI/AAAAAAAAA58/Dur0lirveco/s1600/blog0.jpg5/27/2018 Stored Procedure G5
23/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
23
de MySQL JDBC Driver, as como ven, est disponible en NetBeans y li sta para ser utilizada, no
debemos descargar nada, solo falta agregarla a nuestro proyecto
Agregamos el Connector JDBC a Netbeans
Luego en la ventana de libreras disponibles de NetBeans damos click en el botn Create...
http://3.bp.blogspot.com/-BIiKsWjCO0o/UQwL19Mrd-I/AAAAAAAAA6g/kJGX-_Hoj6Y/s1600/blog0.jpghttp://4.bp.blogspot.com/-zGI8cShJeJw/UQfPrjgrqlI/AAAAAAAAA6E/XV1H-Va8YdQ/s1600/blog1.jpghttp://3.bp.blogspot.com/-BIiKsWjCO0o/UQwL19Mrd-I/AAAAAAAAA6g/kJGX-_Hoj6Y/s1600/blog0.jpg5/27/2018 Stored Procedure G5
24/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
24
Tendremos una nueva ventana en la que se nos pide colocar un nombre para la librera y eltipo, pues entonces le colocamos un nombre y el nico tipo disponible es Class Libraries tal
como era de esperarse y damos click en el botn OK para continuar
Llegamos a la ventana "Customize Library", como podrn ver ya tiene el nombre especificado
en la ventana anterior y la ubicacin sera las libreras locales del NetBeans tal como aparece en
los dos primeros campos de texto de la ventana, pero ahora vamos a especificar la localizacion
del JAR/Folder que vamos a agregar, tu puedes dejarlo donde te de la santa y regalada gana,
pero te aconsejo que lo dejes en C:\Program Files\Java\jre7\lib\ext, siguiendo este consejo
demos click en el boton Add JAR/Folder...
http://3.bp.blogspot.com/-njiQl_7yz48/UQwL2eQSAJI/AAAAAAAAA60/dvc85Z4M6a0/s1600/blog3.jpghttp://2.bp.blogspot.com/-IccjIaDGaUw/UQwL2OreJJI/AAAAAAAAA6s/qwTPk8RjDTw/s1600/blog2.jpg5/27/2018 Stored Procedure G5
25/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
25
Al apretar el botn de Add JAR/Folder tendremos la ventana de Browse JAR/Folder como lasiguiente en la que debemos localizar el connector para MySQL y localizamos el connector
en C:\Program Files\Java\jre7\lib\ext
escogemos el connector y apretamos el botn Add JAR/Folder
http://1.bp.blogspot.com/-aMosEIIYri4/UQwL2qvzfHI/AAAAAAAAA64/4iXNQa91xxU/s1600/blog4.jpghttp://4.bp.blogspot.com/-FaqoVS8OAEI/UQwL3dj6npI/AAAAAAAAA7E/hTHZlu4AYlg/s1600/blog6.jpg5/27/2018 Stored Procedure G5
26/34
26
Regresamos a la ventana "Customize Library" ya con el Connector disponible y presionamos el
botn OK
http://4.bp.blogspot.com/-my2oWfNsIV8/UQwL3RjmeLI/AAAAAAAAA7I/46TgHPcfQgM/s1600/blog7.jpghttp://1.bp.blogspot.com/-xjC-JxKQcA8/UQwL4Bo0pDI/AAAAAAAAA7g/oK3WTYmZb5U/s1600/blog8.jpghttp://4.bp.blogspot.com/-my2oWfNsIV8/UQwL3RjmeLI/AAAAAAAAA7I/46TgHPcfQgM/s1600/blog7.jpg5/27/2018 Stored Procedure G5
27/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
27
y cmo podemos verificar, la librera ya est agregada a nuestro proyecto
Establecemos la Conexin desde JavaLa aplicacin se desarrollara en NetBeans 6.9.1, se crearan dos paquetes, uno l lamado
ConexionMySQL que tendr una clase conexion.java con un mtodo Conectar que servir para
conectarnos a la base de datos, este devolver un objeto del tipo Connection.
Tambin se creara un paquete llamado Formulario y dentro de este agregaremos un
formulario JForm con nombre Java_MySQL.java que sera la interfaz de interaccin con el
usuario y que importara desde el paquete ConexionMySQL al mtodo Conectar, ademas se
debe recordar el importar el connector de MySQl en las libreras de nuestra aplicacin, la
estructura de la aplicacin queda as:
http://1.bp.blogspot.com/-9BW247j_Nm8/UQwL4asXMcI/AAAAAAAAA7k/Qcc1v3-Axuk/s1600/blog9.jpghttp://1.bp.blogspot.com/-KwCaJHw5QxY/UQwL1-HpN_I/AAAAAAAAA6o/IoUkUpkj_jM/s1600/blog10.jpg5/27/2018 Stored Procedure G5
28/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
28
Diseo del Formulario
5/27/2018 Stored Procedure G5
29/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
29
Mostrar los Datos de la Tabla FormularioPara mostrar los datos de la tabla empleado no se usara un procedimiento almacenado sino
mas bien se construir una vista en MySQL, se usara la sentecia: select * from empleado, como
sugerencia, no se debe evitar en lo posible utilzar el * en sentencias se lect, pero en esteejemplo se utiliza sobre todo para mostrar la construccin y el uso de las vistas MySQL en Java
La tabla se poblara con los datos cada vez que se inicie la aplicacin y cada vez que se hagauna accin sobre la base de datos, esto lo har el mtodo CargarDatos()
5/27/2018 Stored Procedure G5
30/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
30
Ingresar Datos a la Tabla EmpleadoProcedimiento almacenado en MySQL para ingresar datos a la tabla empleado:
5/27/2018 Stored Procedure G5
31/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
31
Evento click del botn Ingresar, este invoca al mtodo IngresarDatos() y
le enva los parmetros necesarios para realizar la operacin de agregar datos sobre la tabla
empleado
y por ltimo el mtodo IngresarDatos() que se conecta con la base de datos, se utilizara este
string: String Insertar="CALL InsertarDatos(?,?,?,?,?)"; para invocar al procedimiento
almacenado InsertarDatos y se prepara la sentencia CallableStatement para envar los datos
necesarios al procedimiento y agregar el registro correspondiente de la tabla empleados, al
final refrescara el JTable con los nuevos datos de la tabla empleado.
5/27/2018 Stored Procedure G5
32/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
32
Modificar Datos de la Tabla EmpleadoProcedimiento almacenado en MySQL para modificar datos en la tabla empleado:
Evento click del botn Modificar Datos, este invoca al mtodo ModificarDatos() y
le enva los parmetros necesarios para realizar la operacin de modificacin sobre la tabla
empleado.
Mtodo ModificarDatos() que se conecta con la base de datos, se utilizara este string: String
Modificar="CALL ModificarDatos(?,?,?,?,?)"; para invocar al procedimiento
almacenado ModificarDatos y se prepara la sentencia CallableStatement para envar los datos
necesarios al procedimiento y modificar el registro correspondiente de la tabla empleados, al
final refrescara el JTable con los nuevos datos de la tabla empleado.
5/27/2018 Stored Procedure G5
33/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
33
Eliminar Datos de la Tabla EmpleadoProcedimiento almacenado en MySQL para eliminar datos en la tabla empleado:
5/27/2018 Stored Procedure G5
34/34
UNIVERSIDAD NACIONAL DE TRUJILLO TECNOLOGA DE LA PROGRAMACIN II
34
Evento click del botn Eliminar Datos, este invoca al mtodo EliminarDatos() y
le enva los parmetros necesarios para realizar la operacin de eliminar un registro de la tabla
empleado:
Mtodo EliminarDatos() que se conecta con la base de datos, se utilizara este string: String
Eliminar="CALL BorrarDatos(?)"; para invocar al procedimiento almacenado BorrarDatos y se
prepara la sentencia CallableStatement para envan los datos necesarios al procedimiento yeliminar el registro correspondiente de la tabla empleados, al final refrescara el JTable con los
nuevos datos de la tabla empleado.
Mtodo Main