Stored Procedure G5

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.html
  • 5/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.html
  • 5/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.jpg
  • 5/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.jpg
  • 5/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.jpg
  • 5/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.jpg
  • 5/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.jpg
  • 5/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.jpg
  • 5/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