En este módulo, aprenderemos cómo interactuar con bases de datos utilizando REXX. Este conocimiento es crucial para desarrollar aplicaciones que requieran almacenamiento y recuperación de datos de manera eficiente.

Objetivos del Módulo

  • Comprender los conceptos básicos de acceso a bases de datos.
  • Aprender a conectar REXX con una base de datos.
  • Ejecutar consultas SQL desde REXX.
  • Manipular datos (insertar, actualizar, eliminar) en una base de datos.
  • Manejar errores comunes en operaciones de bases de datos.

Contenido

Conceptos Básicos de Bases de Datos

Antes de comenzar con la programación, es importante entender algunos conceptos básicos sobre bases de datos:

  • Base de Datos (BD): Colección organizada de datos que se pueden acceder, gestionar y actualizar.
  • SQL (Structured Query Language): Lenguaje estándar para gestionar y manipular bases de datos.
  • Tabla: Estructura dentro de una base de datos que organiza los datos en filas y columnas.
  • Registro: Fila en una tabla que contiene datos específicos.
  • Campo: Columna en una tabla que contiene un tipo específico de datos.

Configuración del Entorno para Acceso a Bases de Datos

Para interactuar con una base de datos desde REXX, necesitamos configurar el entorno adecuadamente. Esto incluye instalar y configurar un controlador de base de datos compatible con REXX.

Pasos de Configuración

  1. Instalar el Controlador de Base de Datos:

    • Dependiendo de la base de datos que estés utilizando (por ejemplo, DB2, MySQL, Oracle), necesitarás instalar el controlador correspondiente.
    • Asegúrate de que el controlador esté correctamente instalado y configurado en tu sistema.
  2. Configurar el Archivo de Conexión:

    • Crea un archivo de configuración que contenga los detalles de la conexión a la base de datos, como el nombre del servidor, el nombre de la base de datos, el usuario y la contraseña.

Conexión a una Base de Datos

Para conectar REXX a una base de datos, utilizaremos una biblioteca específica que permita la conexión y ejecución de comandos SQL. A continuación, se muestra un ejemplo de cómo establecer una conexión:

/* Conexión a una base de datos MySQL */
db_host = 'localhost'
db_user = 'usuario'
db_pass = 'contraseña'
db_name = 'nombre_base_datos'

/* Cargar la biblioteca de conexión */
call rxfuncadd 'SQLConnect', 'rxsql', 'SQLConnect'

/* Establecer la conexión */
call SQLConnect db_host, db_user, db_pass, db_name

if rc = 0 then
    say 'Conexión exitosa a la base de datos'
else
    say 'Error al conectar a la base de datos'

Explicación del Código

  • db_host, db_user, db_pass, db_name: Variables que almacenan los detalles de la conexión.
  • rxfuncadd: Función que agrega una función externa (en este caso, SQLConnect) al entorno REXX.
  • SQLConnect: Función que establece la conexión a la base de datos utilizando los detalles proporcionados.

Ejecutar Consultas SQL

Una vez establecida la conexión, podemos ejecutar consultas SQL para recuperar datos de la base de datos. A continuación, se muestra un ejemplo de cómo ejecutar una consulta SELECT:

/* Ejecutar una consulta SELECT */
query = 'SELECT * FROM empleados'

/* Cargar la biblioteca de ejecución de consultas */
call rxfuncadd 'SQLExecDirect', 'rxsql', 'SQLExecDirect'

/* Ejecutar la consulta */
call SQLExecDirect query

if rc = 0 then do
    /* Procesar los resultados */
    do while SQLFetch() = 0
        say 'ID:' SQLGetData(1) 'Nombre:' SQLGetData(2) 'Apellido:' SQLGetData(3)
    end
end
else
    say 'Error al ejecutar la consulta'

Explicación del Código

  • query: Variable que almacena la consulta SQL.
  • SQLExecDirect: Función que ejecuta la consulta SQL.
  • SQLFetch: Función que recupera la siguiente fila de resultados.
  • SQLGetData: Función que obtiene los datos de una columna específica en la fila actual.

Manipulación de Datos

Además de recuperar datos, también podemos insertar, actualizar y eliminar datos en la base de datos. A continuación, se muestra un ejemplo de cómo insertar un nuevo registro:

/* Insertar un nuevo registro */
insert_query = "INSERT INTO empleados (id, nombre, apellido) VALUES (4, 'Juan', 'Pérez')"

/* Ejecutar la consulta de inserción */
call SQLExecDirect insert_query

if rc = 0 then
    say 'Registro insertado exitosamente'
else
    say 'Error al insertar el registro'

Explicación del Código

  • insert_query: Variable que almacena la consulta SQL de inserción.
  • SQLExecDirect: Función que ejecuta la consulta SQL.

Manejo de Errores

Es importante manejar los errores que puedan ocurrir durante las operaciones de base de datos. A continuación, se muestra un ejemplo de cómo manejar errores:

/* Ejecutar una consulta con manejo de errores */
query = 'SELECT * FROM empleados'

call SQLExecDirect query

if rc \= 0 then do
    say 'Error al ejecutar la consulta'
    call SQLGetError
    say 'Código de error:' SQLGetErrorCode()
    say 'Mensaje de error:' SQLGetErrorMessage()
end
else do
    /* Procesar los resultados */
    do while SQLFetch() = 0
        say 'ID:' SQLGetData(1) 'Nombre:' SQLGetData(2) 'Apellido:' SQLGetData(3)
    end
end

Explicación del Código

  • SQLGetError: Función que obtiene los detalles del error.
  • SQLGetErrorCode: Función que obtiene el código del error.
  • SQLGetErrorMessage: Función que obtiene el mensaje del error.

Ejercicio Práctico

Ejercicio

  1. Conéctate a una base de datos de prueba.
  2. Crea una tabla llamada productos con las columnas id, nombre y precio.
  3. Inserta tres registros en la tabla productos.
  4. Recupera y muestra todos los registros de la tabla productos.
  5. Actualiza el precio de uno de los productos.
  6. Elimina uno de los productos.

Solución

/* Conexión a la base de datos */
db_host = 'localhost'
db_user = 'usuario'
db_pass = 'contraseña'
db_name = 'nombre_base_datos'

call rxfuncadd 'SQLConnect', 'rxsql', 'SQLConnect'
call SQLConnect db_host, db_user, db_pass, db_name

if rc \= 0 then do
    say 'Error al conectar a la base de datos'
    exit
end

/* Crear la tabla productos */
create_table_query = 'CREATE TABLE productos (id INT, nombre VARCHAR(50), precio DECIMAL(10,2))'
call SQLExecDirect create_table_query

if rc \= 0 then do
    say 'Error al crear la tabla'
    exit
end

/* Insertar registros */
insert_query1 = "INSERT INTO productos (id, nombre, precio) VALUES (1, 'Producto1', 10.00)"
insert_query2 = "INSERT INTO productos (id, nombre, precio) VALUES (2, 'Producto2', 20.00)"
insert_query3 = "INSERT INTO productos (id, nombre, precio) VALUES (3, 'Producto3', 30.00)"

call SQLExecDirect insert_query1
call SQLExecDirect insert_query2
call SQLExecDirect insert_query3

if rc \= 0 then do
    say 'Error al insertar los registros'
    exit
end

/* Recuperar y mostrar registros */
select_query = 'SELECT * FROM productos'
call SQLExecDirect select_query

if rc = 0 then do
    do while SQLFetch() = 0
        say 'ID:' SQLGetData(1) 'Nombre:' SQLGetData(2) 'Precio:' SQLGetData(3)
    end
end
else
    say 'Error al recuperar los registros'

/* Actualizar el precio de un producto */
update_query = "UPDATE productos SET precio = 25.00 WHERE id = 2"
call SQLExecDirect update_query

if rc \= 0 then do
    say 'Error al actualizar el registro'
    exit
end

/* Eliminar un producto */
delete_query = "DELETE FROM productos WHERE id = 3"
call SQLExecDirect delete_query

if rc \= 0 then do
    say 'Error al eliminar el registro'
    exit
end

say 'Operaciones completadas exitosamente'

Conclusión

En este módulo, hemos aprendido cómo conectar REXX a una base de datos, ejecutar consultas SQL, manipular datos y manejar errores. Estos conocimientos son fundamentales para desarrollar aplicaciones que interactúen con bases de datos de manera eficiente. En el próximo módulo, exploraremos la programación web con REXX, donde aplicaremos estos conceptos en un contexto más amplio.

© Copyright 2024. Todos los derechos reservados