English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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
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.
Numero | API & Descrizione |
---|---|
1 | DBI->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(). |
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
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.
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
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 操作完成成功
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 操作完成成功
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 操作完成成功