SQLite - Perl
Installation
SQLite3 peut être intégré à Perl en utilisant le module Perl DBI. Le module Perl DBI est le module d'accès aux bases de données pour le langage de programmation Perl. Il définit un ensemble de méthodes, variables et règles qui fournissent une interface standard de base de données.
Ce qui suit montre les étapes simples pour installer le module DBI sur une machine Linux/UNIX :
$ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz $ tar xvfz DBI-1.625.tar.gz $ cd DBI-1.625 $ perl Makefile.PL $ make $ make install
Si vous devez installer le pilote SQLite pour DBI, vous pouvez suivre les étapes ci-dessous pour l'installer :
$ wget http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/DBD-SQLite-1.11.tar.gz $ tar xvfz DBD-SQLite-1.11.tar.gz $ cd DBD-SQLite-1.11 $ perl Makefile.PL $ make $ make install
API d'interface DBI
Les programmes DBI suivants sont importants et peuvent répondre à vos besoins d'utilisation de la base de données SQLite dans les programmes Perl. Pour plus de détails, veuillez vous référer à la documentation officielle de Perl DBI.
| N° de série | API et description |
|---|---|
| 1 | DBI->connect($data_source, "", "", \%attr) Établit une connexion ou une session de base de données vers le $data_source demandé. Si la connexion réussit, elle renvoie un objet handle de base de données. La source de données prend la forme suivante :DBI:SQLite:dbname='test.db'Ici, SQLite est le nom du pilote SQLite, et test.db est le nom du fichier de base de données SQLite. Si le nom de fichierfilenameest attribué à':memory:'alors il créera une base de données en mémoire dans la RAM, qui ne persistera que pendant la durée de la session. Si le nom de fichier filename est un nom de fichier de périphérique réel, il tentera d'ouvrir le fichier de base de données en utilisant la valeur de ce paramètre. Si un fichier portant ce nom n'existe pas, un nouveau fichier de base de données portant ce nom sera créé. Vous pouvez laisser les deuxième et troisième paramètres comme des chaînes vides, et le dernier paramètre est utilisé pour transmettre divers attributs ; voir l'explication de l'exemple ci-dessous pour plus de détails. |
| 2 | $dbh->do($sql) Cette routine prépare et exécute une instruction SQL simple. Elle renvoie le nombre de lignes affectées, ou undef si une erreur se produit. Une valeur de retour de -1 signifie que le nombre de lignes est inconnu, non applicable ou indisponible. Ici, $dbh est le handle renvoyé par l'appel DBI->connect(). |
| 3 | $dbh->prepare($sql) Cette routine prépare une instruction pour une exécution ultérieure par le moteur de base de données et renvoie un objet handle d'instruction. |
| 4 | $sth->execute() Cette routine effectue tout traitement nécessaire pour exécuter une instruction préparée. Elle renvoie undef si une erreur se produit. Si elle est exécutée avec succès, elle renvoie toujours true quel que soit le nombre de lignes affectées. Ici, $sth est le handle d'instruction renvoyé par l'appel $dbh->prepare($sql). |
| 5 | $sth->fetchrow_array() Cette routine récupère la ligne de données suivante et la renvoie sous forme de liste contenant les valeurs de chaque champ. Dans cette liste, les champs Null sont renvoyés sous forme de valeurs undef. |
| 6 | $DBI::err Ceci est équivalent à $h->err. Ici, $h est un type de handle quelconque, tel que $dbh, $sth ou $drh. Cette routine renvoie le code d'erreur du moteur de base de données provenant de la dernière méthode de pilote appelée. |
| 7 | $DBI::errstr Ceci est équivalent à $h->errstr. Ici, $h est n'importe quel type de handle, tel que $dbh, $sth ou $drh. Cette routine renvoie le message d'erreur du moteur de base de données de la dernière méthode DBI appelée. |
| 8 | $dbh->disconnect() Cette routine ferme une connexion à une base de données précédemment ouverte en appelant DBI->connect(). |
Connexion à la base de données
Le code Perl suivant montre comment se connecter à une base de données existante. Si la base de données n'existe pas, elle sera créée, et finalement un objet de base de données sera renvoyé.
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
Maintenant, exécutons le programme ci-dessus pour créer notre base de données dans le répertoire courant.test.dbVous pouvez modifier le chemin selon vos besoins. Enregistrez le code ci-dessus dans le fichier sqlite.pl et exécutez-le comme indiqué ci-dessous. Si la base de données est créée avec succès, un message comme celui présenté ci-dessous s'affichera.
$ chmod +x sqlite.pl $ ./sqlite.pl Open database successfully
Créer une table
L'extrait de code Perl suivant est utilisé pour créer une table dans la base de données précédemment créée :
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL););
my $rv = $dbh->do($stmt);
if($rv < 0){
print $DBI::errstr;
} else {
print "Table created successfully\n";
}
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il vatest.dbcréer la table COMPANY dedans, et afficher le message suivant :
Opened database successfully Table created successfully
Remarque :Si vous rencontrez l'erreur suivante dans n'importe quelle opération : dans le cas où vous verriez l'erreur suivante dans l'une des opérations :
DBD::SQLite::st execute failed: not an error(21) at dbdimp.c line 398
Dans ce cas, vous avez ouvert le fichier dbdimp.c disponible dans l'installation DBD-SQLite, et trouvez la fonction sqlite3_prepare(), et changez son troisième paramètre de 0 à -1. Enfin, utilisezmakeetmake installinstallez DBD::SQLite, et le problème sera résolu. sqlite3_prepare() fonction et changez son troisième argument en -1 au lieu de 0. Enfin, installez DBD::SQLite en utilisant make et exécutez make install pour résoudre le problème.
Opération INSERT
Le programme Perl suivant montre comment créer des enregistrements dans la table COMPANY créée ci-dessus :
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 ));
my $rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ););
$rv = $dbh->do($stmt) or die $DBI::errstr;
print "Records created successfully\n";
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il crée les enregistrements donnés dans la table COMPANY et affiche les deux lignes suivantes :
Opened database successfully Records created successfully
Opération SELECT
Le programme Perl suivant montre comment récupérer et afficher des enregistrements de la table COMPANY créée précédemment :
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant :
Opened database successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
Opération UPDATE
Le code Perl suivant montre comment utiliser l'instruction UPDATE pour mettre à jour un enregistrement quelconque, puis récupérer et afficher l'enregistrement mis à jour depuis la table COMPANY :
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ){
print $DBI::errstr;
}else{
print "Total number of rows updated : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant :
Opened database successfully Total number of rows updated : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
Opération DELETE
Le code Perl suivant montre comment utiliser l'instruction DELETE pour supprimer un enregistrement quelconque, puis récupérer et afficher les enregistrements restants de la table COMPANY :
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(DELETE from COMPANY where ID=2;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ){
print $DBI::errstr;
}else{
print "Total number of rows deleted : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant :
Opened database successfully Total number of rows deleted : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfullyAutres extensions