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
-
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.
-
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
- Conéctate a una base de datos de prueba.
- Crea una tabla llamada
productos
con las columnasid
,nombre
yprecio
. - Inserta tres registros en la tabla
productos
. - Recupera y muestra todos los registros de la tabla
productos
. - Actualiza el precio de uno de los productos.
- 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.
Curso de Programación REXX
Módulo 1: Introducción a REXX
- ¿Qué es REXX?
- Configuración del Entorno REXX
- Hola Mundo en REXX
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
Módulo 2: Conceptos Básicos de Programación
- Operadores y Expresiones
- Estructuras de Control: IF/THEN/ELSE
- Bucles: DO y LEAVE
- Entrada y Salida
- Manipulación Básica de Cadenas
Módulo 3: Programación Intermedia en REXX
- Funciones y Subrutinas
- Funciones Integradas
- Manejo de Errores
- Operaciones de Entrada/Salida de Archivos
- Trabajando con Arreglos
Módulo 4: Programación Avanzada en REXX
- Manipulación Avanzada de Cadenas
- Técnicas de Análisis
- Interfaz con Programas Externos
- Macros en REXX
- Optimización del Rendimiento