En aquest tema, aprendrem a interactuar amb bases de dades utilitzant el mòdul DBI (Database Interface) de Perl. DBI és una interfície independent de la base de dades que permet als programes Perl accedir a bases de dades de manera consistent i eficient.

Continguts

  1. Introducció a DBI
  2. Instal·lació de DBI i DBD
  3. Connexió a una Base de Dades
  4. Executar Consultes SQL
  5. Recuperar Resultats
  6. Gestió d'Errors
  7. Tancar la Connexió
  8. Exercicis Pràctics

  1. Introducció a DBI

DBI és una interfície de programació d'aplicacions (API) per a bases de dades en Perl. Proporciona un conjunt de mètodes per interactuar amb bases de dades de manera independent del sistema de gestió de bases de dades (SGBD) utilitzat.

Característiques de DBI:

  • Independència del SGBD: Permet canviar de SGBD sense modificar el codi Perl.
  • Consistència: Proporciona una API consistent per a diferents SGBD.
  • Flexibilitat: Suporta múltiples SGBD com MySQL, PostgreSQL, SQLite, Oracle, etc.

  1. Instal·lació de DBI i DBD

Per utilitzar DBI, necessitem instal·lar el mòdul DBI i el driver específic per al SGBD que utilitzarem (DBD::mysql, DBD::Pg, etc.).

Instal·lació de DBI:

cpan DBI

Instal·lació del driver DBD (exemple per a MySQL):

cpan DBD::mysql

  1. Connexió a una Base de Dades

Per connectar-nos a una base de dades, utilitzem el mètode DBI->connect. Aquest mètode requereix tres paràmetres: el Data Source Name (DSN), el nom d'usuari i la contrasenya.

Exemple de Connexió:

use DBI;

my $dsn = "DBI:mysql:database=testdb;host=localhost";
my $username = "root";
my $password = "password";

my $dbh = DBI->connect($dsn, $username, $password, {
    RaiseError => 1,
    AutoCommit => 1,
}) or die $DBI::errstr;

print "Connexió establerta!\n";

Explicació:

  • DSN: Conté el tipus de SGBD, el nom de la base de dades i l'host.
  • RaiseError: Si és cert, DBI generarà una excepció en cas d'error.
  • AutoCommit: Si és cert, les operacions es confirmen automàticament.

  1. Executar Consultes SQL

Podem executar consultes SQL utilitzant el mètode do per a operacions simples o prepare i execute per a operacions més complexes.

Exemple d'Inserció:

my $sql = "INSERT INTO users (name, email) VALUES (?, ?)";
my $sth = $dbh->prepare($sql);
$sth->execute('John Doe', '[email protected]');

Explicació:

  • prepare: Prepara la consulta SQL.
  • execute: Executa la consulta amb els valors proporcionats.

  1. Recuperar Resultats

Per recuperar resultats d'una consulta SELECT, utilitzem el mètode fetchrow_array o fetchrow_hashref.

Exemple de Selecció:

my $sql = "SELECT id, name, email FROM users";
my $sth = $dbh->prepare($sql);
$sth->execute();

while (my @row = $sth->fetchrow_array) {
    print "ID: $row[0], Name: $row[1], Email: $row[2]\n";
}

Explicació:

  • fetchrow_array: Recupera una fila com una llista.

  1. Gestió d'Errors

DBI proporciona mecanismes per gestionar errors mitjançant RaiseError i PrintError.

Exemple de Gestió d'Errors:

$dbh->{RaiseError} = 1;
eval {
    $dbh->do("INVALID SQL STATEMENT");
};
if ($@) {
    print "Error: $@\n";
}

Explicació:

  • RaiseError: Genera una excepció en cas d'error.
  • eval: Captura l'excepció.

  1. Tancar la Connexió

És important tancar la connexió a la base de dades quan ja no la necessitem.

Exemple de Tancament:

$dbh->disconnect();
print "Connexió tancada.\n";

  1. Exercicis Pràctics

Exercici 1: Connexió i Inserció

  1. Connecta't a una base de dades MySQL anomenada testdb.
  2. Crea una taula products amb les columnes id, name i price.
  3. Insereix un producte a la taula.

Solució:

use DBI;

my $dsn = "DBI:mysql:database=testdb;host=localhost";
my $username = "root";
my $password = "password";

my $dbh = DBI->connect($dsn, $username, $password, {
    RaiseError => 1,
    AutoCommit => 1,
}) or die $DBI::errstr;

$dbh->do("CREATE TABLE IF NOT EXISTS products (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), price DECIMAL(10,2))");

my $sql = "INSERT INTO products (name, price) VALUES (?, ?)";
my $sth = $dbh->prepare($sql);
$sth->execute('Product1', 19.99);

$dbh->disconnect();
print "Producte inserit i connexió tancada.\n";

Exercici 2: Selecció i Impressió

  1. Connecta't a la base de dades testdb.
  2. Selecciona tots els productes de la taula products i imprimeix-los.

Solució:

use DBI;

my $dsn = "DBI:mysql:database=testdb;host=localhost";
my $username = "root";
my $password = "password";

my $dbh = DBI->connect($dsn, $username, $password, {
    RaiseError => 1,
    AutoCommit => 1,
}) or die $DBI::errstr;

my $sql = "SELECT id, name, price FROM products";
my $sth = $dbh->prepare($sql);
$sth->execute();

while (my @row = $sth->fetchrow_array) {
    print "ID: $row[0], Name: $row[1], Price: $row[2]\n";
}

$dbh->disconnect();
print "Connexió tancada.\n";

Conclusió

En aquest tema, hem après a utilitzar el mòdul DBI per interactuar amb bases de dades en Perl. Hem cobert la connexió a una base de dades, l'execució de consultes SQL, la recuperació de resultats, la gestió d'errors i el tancament de la connexió. Els exercicis pràctics proporcionats reforcen aquests conceptes i preparen l'estudiant per a aplicacions més avançades en Perl.

© Copyright 2024. Tots els drets reservats