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érieAPI et description
1DBI->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 successfully
Autres extensions