English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Perl SQLite

Installazione

SQLite3 può essere integrato con Perl utilizzando il modulo Perl DBI. Il modulo Perl DBI è un modulo di accesso al database del linguaggio di programmazione Perl. Definisce un insieme di metodi, variabili e regole che offrono un'interfaccia standard ai database.

Di seguito sono riportati i semplici passaggi per l'installazione del modulo DBI su macchine 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

Se hai bisogno di installare il driver SQLite per DBI, puoi seguire i seguenti passaggi per l'installazione:

$ 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 dell'interfaccia DBI

Di seguito sono riportati i programmi DBI importanti che possono soddisfare le tue esigenze di utilizzo del database SQLite nei programmi Perl. Per ulteriori dettagli, consulta la documentazione ufficiale di Perl DBI.

NumeroAPI & Descrizione
1DBI->connect($data_source, "", "", \%attr)

Esegue la connessione alla base di dati o alla sessione richiesta da $data_source. Se la connessione è riuscita, restituisce un oggetto di gestione del database.

La forma del sorgente dei dati è come segue:DBI:SQLite:dbname='test.db'Tra cui, SQLite è il nome del driver SQLite, test.db è il nome del file della base di dati SQLite. Se il nome del file filename assegna il valore a ':memory:'Allora, creerà una base di dati in memoria nel RAM, che continuerà solo durante la validità della sessione.

Se il nome del file filename è il nome effettivo del file dispositivo, allora cercherà di aprire il file del database utilizzando questo valore di parametro. Se il file con questo nome non esiste, creerà un nuovo file di database con questo nome.

Puoi lasciare vuoti il secondo e il terzo parametro come stringhe vuote, mentre l'ultimo parametro è usato per passare vari attributi, vedi l'esempio di spiegazione seguente.

2$dbh->do($sql)

Questa routine prepara ed esegue una statement SQL semplice. Restituisce il numero di righe influenzate, o undef se si verifica un errore. Il valore -1 significa che il numero di righe è sconosciuto, non applicabile o non disponibile. In questo caso, $dbh è l'oggetto di elaborazione restituito dalla chiamata DBI->connect().

3$dbh->prepare($sql)

Questa routine prepara una statement per l'esecuzione successiva dal motore di database e restituisce un oggetto di elaborazione della statement.

4$sth->execute()

Questa routine esegue qualsiasi elaborazione necessaria per eseguire una statement preparata. Restituisce undef se si verifica un errore. Restituisce true se l'esecuzione è avvenuta con successo, indipendentemente dal numero di righe influenzate. In questo caso, $sth è l'oggetto di elaborazione restituito dalla chiamata $dbh->prepare($sql).

5$sth->fetchrow_array()

Questa routine ottiene la riga successiva dei dati e la restituisce come elenco di valori delle rispettive colonne. I campi Null vengono restituiti come valore undef nell'elenco.

6$DBI::err

Questo è equivalente a $h->err. Dove $h è qualsiasi tipo di elaborazione, come $dbh, $sth o $drh. Il programma restituisce il codice di errore del motore del driver dell'ultima chiamata al metodo.

7$DBI::errstr

Questo è equivalente a $h->errstr. Dove $h è qualsiasi tipo di elaborazione, come $dbh, $sth o $drh. Il programma restituisce il messaggio di errore del motore di database dell'ultima chiamata DBI.

8$dbh->disconnect()

Questa routine chiude la connessione al database aperta precedentemente con DBI->connect().

Connessione al database

Il codice Perl seguente mostra come connettersi a un database esistente. Se il database non esiste, verrà creato e infine restituito un oggetto database.

#!/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 "Database aperto con successo\n";

Ora, eseguiamo il programma sopra per creare il nostro database nella directory corrente test.dbPuoi modificare il percorso secondo necessità. Salva il codice sopra in un file chiamato sqlite.pl e esegui come segue. Se il database viene creato con successo, verrà visualizzato il messaggio seguente:

$ chmod +x sqlite.pl
$ ./sqlite.pl
Database aperto con successo

Creazione della tabella

Il seguente segmento di codice Perl verrà utilizzato per creare una tabella nel database creato in precedenza:

#!/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 "Database aperto con successo\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 "Tabella creata con successo\n";
}
$dbh->disconnect();

Quando viene eseguito il programma sopra, creerà test.db Crea la tabella COMPANY all'interno di essa e mostra il messaggio seguente:

Database aperto con successo
Tabella creata con successo

Attenzione:Se incontri l'errore seguente in qualsiasi operazione:

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

In questo caso, hai già aperto il file dbdimp.c disponibile nell'installazione di DBD-SQLite e trovi sqlite3_prepare() funzione, e cambiare il terzo argomento 0 in -1. Infine, utilizzare make e make install Installare DBD::SQLite per risolvere il problema. in questo caso avrai il file dbdimp.c disponibile nell'installazione di DBD-SQLite e scopri sqlite3_prepare() funzione e cambiare il terzo argomento in -1 invece di 0. Infine, installa DBD::SQLite utilizzando make e fare make install per risolvere il problema.

Operazione INSERT

Il seguente programma Perl mostra come creare record nella tabella COMPANY creata in precedenza:

#!/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 "Database aperto con successo\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 creati con successo\n";
$dbh->disconnect();

Quando viene eseguito il programma sopra riportato, crea il record specificato nella tabella COMPANY e visualizza le seguenti due righe:

Database aperto con successo
Records creati con successo

Operazione SELECT

Il seguente programma Perl mostra come ottenere e visualizzare i record dalla tabella COMPANY precedentemente creata:

#!/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 "Database aperto con successo\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 "Operazione eseguita con successo\n";
$dbh->disconnect();

Quando il programma sopra menzionato viene eseguito, produce i seguenti risultati:

Database aperto con successo
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
操作完成成功

Operazione UPDATE

Il seguente codice Perl mostra come utilizzare l'istruzione UPDATE per aggiornare qualsiasi record e quindi ottenere e visualizzare i record aggiornati dalla tabella 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 "Database aperto con successo\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;
}
   print "Numero totale di righe aggiornate: $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 "Operazione eseguita con successo\n";
$dbh->disconnect();

Quando il programma sopra menzionato viene eseguito, produce i seguenti risultati:

Database aperto con successo
Numero totale di righe aggiornate: 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
操作完成成功

Operazione DELETE

Il seguente codice Perl mostra come utilizzare l'istruzione DELETE per eliminare qualsiasi record e quindi ottenere e visualizzare i record rimanenti dalla tabella 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 "Database aperto con successo\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;
}
   print "Numero totale di righe eliminate: $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 "Operazione eseguita con successo\n";
$dbh->disconnect();

Quando il programma sopra menzionato viene eseguito, produce i seguenti risultati:

Database aperto con successo
Numero totale di righe eliminate: 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
操作完成成功