En este módulo, aprenderemos cómo interactuar con bases de datos utilizando RPG. Este es un aspecto crucial para cualquier aplicación empresarial, ya que la mayoría de las aplicaciones necesitan almacenar y recuperar datos de una base de datos.

Objetivos del Módulo

  • Comprender los conceptos básicos de las bases de datos.
  • Aprender a conectarse a una base de datos desde un programa RPG.
  • Realizar operaciones básicas de CRUD (Crear, Leer, Actualizar, Eliminar) en una base de datos.
  • Manejar errores comunes y optimizar el acceso a la base de datos.

Conceptos Básicos de Bases de Datos

¿Qué es una Base de Datos?

Una base de datos es una colección organizada de datos que se pueden acceder, gestionar y actualizar fácilmente. Las bases de datos se utilizan para almacenar información de manera estructurada y permiten realizar operaciones de consulta y manipulación de datos.

Tipos de Bases de Datos

  • Relacionales (RDBMS): Utilizan tablas para almacenar datos y se basan en el modelo relacional. Ejemplos: MySQL, PostgreSQL, SQL Server.
  • NoSQL: Utilizan diferentes modelos de datos como documentos, grafos, etc. Ejemplos: MongoDB, Cassandra.

Conectarse a una Base de Datos desde RPG

Configuración del Entorno

Antes de comenzar a programar, asegúrate de tener acceso a una base de datos y las credenciales necesarias para conectarte a ella. También necesitarás un entorno de desarrollo configurado para RPG.

Ejemplo de Conexión a una Base de Datos

Dcl-S dbName Char(10) Inz('MYDB');
Dcl-S userName Char(10) Inz('myuser');
Dcl-S password Char(10) Inz('mypassword');
Dcl-S sqlState Char(5);
Dcl-S sqlCode Int(10);

Exec SQL
  CONNECT TO :dbName USER :userName USING :password;

If SQLCODE <> 0;
  // Manejo de errores
  Dsply ('Error al conectar a la base de datos: ' + %Char(SQLCODE));
  Return;
EndIf;

Dsply ('Conexión exitosa a la base de datos');

Explicación del Código

  • Dcl-S: Declara variables.
  • Exec SQL CONNECT: Comando SQL para conectarse a la base de datos.
  • If SQLCODE <> 0: Verifica si hubo un error en la conexión.
  • Dsply: Muestra un mensaje en la pantalla.

Operaciones CRUD

Crear (INSERT)

Dcl-S empId Int(10) Inz(1001);
Dcl-S empName Char(50) Inz('John Doe');
Dcl-S empDept Char(10) Inz('HR');

Exec SQL
  INSERT INTO employees (id, name, department)
  VALUES (:empId, :empName, :empDept);

If SQLCODE <> 0;
  Dsply ('Error al insertar datos: ' + %Char(SQLCODE));
Else;
  Dsply ('Datos insertados correctamente');
EndIf;

Leer (SELECT)

Dcl-S empId Int(10) Inz(1001);
Dcl-S empName Char(50);
Dcl-S empDept Char(10);

Exec SQL
  SELECT name, department INTO :empName, :empDept
  FROM employees
  WHERE id = :empId;

If SQLCODE <> 0;
  Dsply ('Error al leer datos: ' + %Char(SQLCODE));
Else;
  Dsply ('Nombre: ' + empName + ', Departamento: ' + empDept);
EndIf;

Actualizar (UPDATE)

Dcl-S empId Int(10) Inz(1001);
Dcl-S newDept Char(10) Inz('IT');

Exec SQL
  UPDATE employees
  SET department = :newDept
  WHERE id = :empId;

If SQLCODE <> 0;
  Dsply ('Error al actualizar datos: ' + %Char(SQLCODE));
Else;
  Dsply ('Datos actualizados correctamente');
EndIf;

Eliminar (DELETE)

Dcl-S empId Int(10) Inz(1001);

Exec SQL
  DELETE FROM employees
  WHERE id = :empId;

If SQLCODE <> 0;
  Dsply ('Error al eliminar datos: ' + %Char(SQLCODE));
Else;
  Dsply ('Datos eliminados correctamente');
EndIf;

Manejo de Errores Comunes

Errores de Conexión

  • SQLCODE -104: Error de sintaxis en la instrucción SQL.
  • SQLCODE -204: Objeto no encontrado en la base de datos.

Errores de Operación

  • SQLCODE -803: Violación de clave única.
  • SQLCODE -530: Violación de restricción de clave foránea.

Consejos Adicionales

  • Optimización: Utiliza índices en las tablas para mejorar el rendimiento de las consultas.
  • Seguridad: Nunca almacenes contraseñas en texto plano y utiliza conexiones seguras.

Ejercicio Práctico

Ejercicio

  1. Conéctate a una base de datos.
  2. Crea una tabla llamada products con las columnas id, name, y price.
  3. Inserta tres registros en la tabla products.
  4. Realiza una consulta para obtener todos los productos cuyo precio sea mayor a 50.
  5. Actualiza el precio de un producto específico.
  6. Elimina un producto de la tabla.

Solución

// Conexión a la base de datos
Exec SQL
  CONNECT TO :dbName USER :userName USING :password;

// Crear tabla
Exec SQL
  CREATE TABLE products (
    id INT PRIMARY KEY,
    name CHAR(50),
    price DECIMAL(10, 2)
  );

// Insertar registros
Exec SQL
  INSERT INTO products (id, name, price) VALUES (1, 'Product A', 30.00);
Exec SQL
  INSERT INTO products (id, name, price) VALUES (2, 'Product B', 60.00);
Exec SQL
  INSERT INTO products (id, name, price) VALUES (3, 'Product C', 90.00);

// Consultar productos con precio mayor a 50
Exec SQL
  SELECT name, price INTO :prodName, :prodPrice
  FROM products
  WHERE price > 50;

// Actualizar precio de un producto
Exec SQL
  UPDATE products
  SET price = 70.00
  WHERE id = 2;

// Eliminar un producto
Exec SQL
  DELETE FROM products
  WHERE id = 1;

Conclusión

En este módulo, hemos aprendido cómo conectarnos a una base de datos desde un programa RPG y realizar operaciones básicas de CRUD. También hemos visto cómo manejar errores comunes y optimizar el acceso a la base de datos. Estos conocimientos son fundamentales para desarrollar aplicaciones empresariales robustas y eficientes.

En el próximo módulo, exploraremos las estructuras de datos y cómo utilizarlas eficazmente en RPG.

© Copyright 2024. Todos los derechos reservados