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 |
|---|---|
| 1 | DBI->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 successfullyAndere Erweiterungen