SQLite - Perl

Installation

SQLite3 kann mit Perl über das Perl-DBI-Modul integriert werden. Das Perl-DBI-Modul ist das Datenbankzugriffsmodul für die Programmiersprache Perl. Es definiert eine Reihe von Methoden, Variablen und Regeln, die eine Standard-Datenbankschnittstelle bereitstellen.

Das Folgende zeigt die einfachen Schritte zur Installation des DBI-Moduls auf einem Linux/UNIX-Rechner:

$ 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

Wenn Sie den SQLite-Treiber für DBI installieren müssen, können Sie die folgenden Schritte befolgen, um ihn zu installieren:

$ 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

DBI-Schnittstellen-API

Im Folgenden finden Sie wichtige DBI-Programme, die Ihren Anforderungen für die Verwendung der SQLite-Datenbank in Perl-Programmen gerecht werden können. Weitere Details finden Sie in der offiziellen Perl-DBI-Dokumentation.

Lfd. Nr.API & Beschreibung
1DBI->connect($data_source, "", "", \%attr)

Stellt eine Datenbankverbindung oder Sitzung zum angeforderten $data_source her. Wenn die Verbindung erfolgreich ist, wird ein Datenbank-Handle-Objekt zurückgegeben.

Die Datenquelle hat die folgende Form:DBI:SQLite:dbname='test.db'Hier ist SQLite der Name des SQLite-Treibers und test.db der Name der SQLite-Datenbankdatei. Wenn dem DateinamenDateinameis assigned':memory:' zugewiesen wirddann wird eine In-Memory-Datenbank im RAM erstellt, die nur für die Dauer der Sitzung bestehen bleibt.

Wenn der Dateiname filename ein tatsächlicher Gerätedateiname ist, wird versucht, die Datenbankdatei mit diesem Parameterwert zu öffnen. Wenn eine Datei mit diesem Namen nicht existiert, wird eine neue Datenbankdatei mit diesem Namen erstellt.

Sie können den zweiten und dritten Parameter als leere Zeichenfolgen belassen, und der letzte Parameter wird verwendet, um verschiedene Attribute zu übergeben; siehe die Beispielerklärung unten für Details.

2$dbh->do($sql)

Diese Routine bereitet eine einfache SQL-Anweisung vor und führt sie aus. Sie gibt die Anzahl der betroffenen Zeilen zurück oder undef, wenn ein Fehler auftritt. Ein Rückgabewert von -1 bedeutet, dass die Anzahl der Zeilen unbekannt, nicht zutreffend oder nicht verfügbar ist. Hierbei ist $dbh das Handle, das vom Aufruf DBI->connect() zurückgegeben wurde.

3$dbh->prepare($sql)

Diese Routine bereitet eine Anweisung für die spätere Ausführung durch die Datenbank-Engine vor und gibt ein Statement-Handle-Objekt zurück.

4$sth->execute()

Diese Routine führt die erforderliche Verarbeitung aus, um eine vorbereitete Anweisung auszuführen. Sie gibt undef zurück, wenn ein Fehler auftritt. Bei erfolgreicher Ausführung gibt sie immer wahr zurück, unabhängig von der Anzahl der betroffenen Zeilen. Hierbei ist $sth das Statement-Handle, das vom Aufruf $dbh->prepare($sql) zurückgegeben wurde.

5$sth->fetchrow_array()

Diese Routine ruft die nächste Datenzeile ab und gibt sie als Liste zurück, die die Werte jedes Feldes enthält. In dieser Liste werden Null-Felder als undef-Werte zurückgegeben.

6$DBI::err

Dies entspricht $h->err. Hierbei ist $h ein beliebiger Handle-Typ, wie etwa $dbh, $sth oder $drh. Diese Routine gibt den Fehlercode der Datenbank-Engine der zuletzt aufgerufenen Treibermethode zurück.

7$DBI::errstr

Dies entspricht $h->errstr. Hierbei ist $h ein beliebiger Handle-Typ, wie etwa $dbh, $sth oder $drh. Diese Routine gibt die Fehlermeldung der Datenbank-Engine der zuletzt aufgerufenen DBI-Methode zurück.

8$dbh->disconnect()

Diese Routine schließt eine Datenbankverbindung, die zuvor durch Aufruf von DBI->connect() geöffnet wurde.

Verbindung zur Datenbank herstellen

Der folgende Perl-Code zeigt, wie eine Verbindung zu einer vorhandenen Datenbank hergestellt wird. Wenn die Datenbank nicht existiert, wird sie erstellt, und schließlich wird ein Datenbankobjekt zurückgegeben.

#!/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";

Nun führen wir das obige Programm aus, um unsere Datenbank im aktuellen Verzeichnis zu erstellen.test.dbSie können den Pfad nach Bedarf ändern. Speichern Sie den obigen Code in der Datei sqlite.pl und führen Sie ihn wie unten gezeigt aus. Wenn die Datenbank erfolgreich erstellt wurde, wird eine Meldung wie die unten gezeigte angezeigt.

$ chmod +x sqlite.pl
$ ./sqlite.pl
Open database successfully

Tabelle erstellen

Der folgende Perl-Codeausschnitt wird verwendet, um eine Tabelle in der zuvor erstellten Datenbank zu erstellen:

#!/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();

Wenn das obige Programm ausgeführt wird, wird es intest.dbdie Tabelle COMPANY erstellen und die folgende Meldung anzeigen:

Opened database successfully
Table created successfully

Hinweis:Wenn Sie bei einer Operation den folgenden Fehler erhalten: falls Sie bei einer der Operationen den folgenden Fehler sehen:

DBD::SQLite::st execute failed: not an error(21) at dbdimp.c line 398

In diesem Fall haben Sie die verfügbare Datei dbdimp.c in der DBD-SQLite-Installation geöffnet und finden die sqlite3_prepare()Funktion und ändern deren dritten Parameter von 0 auf -1. Verwenden Sie schließlichmakeundmake installInstallieren Sie DBD::SQLite, und das Problem wird gelöst. sqlite3_prepare() Funktion und ändern Sie deren drittes Argument auf -1 statt 0. Installieren Sie schließlich DBD::SQLite mit make und führen Sie make install aus um das Problem zu lösen.

INSERT-Operation

Das folgende Perl-Programm zeigt, wie man Datensätze in der oben erstellten Tabelle COMPANY anlegt:

#!/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();

Wenn das obige Programm ausgeführt wird, werden die angegebenen Datensätze in der Tabelle COMPANY erstellt und die folgenden zwei Zeilen angezeigt:

Opened database successfully
Records created successfully

SELECT-Operation

Das folgende Perl-Programm zeigt, wie man Datensätze aus der zuvor erstellten Tabelle COMPANY abruft und anzeigt:

#!/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();

Wenn das obige Programm ausgeführt wird, liefert es das folgende Ergebnis:

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

UPDATE-Operation

Der folgende Perl-Code zeigt, wie man die UPDATE-Anweisung verwendet, um einen beliebigen Datensatz zu aktualisieren und anschließend den aktualisierten Datensatz aus der Tabelle COMPANY abzurufen und anzuzeigen:

#!/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();

Wenn das obige Programm ausgeführt wird, liefert es das folgende Ergebnis:

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

DELETE-Operation

Der folgende Perl-Code zeigt, wie man die DELETE-Anweisung verwendet, um einen beliebigen Datensatz zu löschen und anschließend die verbleibenden Datensätze aus der Tabelle COMPANY abzurufen und anzuzeigen:

#!/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();

Wenn das obige Programm ausgeführt wird, liefert es das folgende Ergebnis:

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
Andere Erweiterungen