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
- Introducció a DBI
- Instal·lació de DBI i DBD
- Connexió a una Base de Dades
- Executar Consultes SQL
- Recuperar Resultats
- Gestió d'Errors
- Tancar la Connexió
- Exercicis Pràctics
- 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.
- 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:
Instal·lació del driver DBD (exemple per a MySQL):
- 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.
- 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.
- 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.
- 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ó.
- Tancar la Connexió
És important tancar la connexió a la base de dades quan ja no la necessitem.
Exemple de Tancament:
- Exercicis Pràctics
Exercici 1: Connexió i Inserció
- Connecta't a una base de dades MySQL anomenada
testdb
. - Crea una taula
products
amb les columnesid
,name
iprice
. - 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ó
- Connecta't a la base de dades
testdb
. - 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.
Curs de Programació en Perl
Mòdul 1: Introducció al Perl
Mòdul 2: Programació Bàsica en Perl
Mòdul 3: Treballant amb Dades
Mòdul 4: Programació Intermèdia en Perl
Mòdul 5: Programació Avançada en Perl
- Expressions Regulars Avançades
- Interacció amb Bases de Dades amb DBI
- Programació Web amb Perl
- Multifil