Tutorial klasik...login
Tutorial klasik SQLite
pengarang:php.cn  masa kemas kini:2022-04-13 17:05:02

SQLite - Perl


Pasang

SQLite3 boleh disepadukan dengan Perl menggunakan modul Perl DBI. Modul Perl DBI ialah modul capaian pangkalan data untuk bahasa pengaturcaraan Perl. Ia mentakrifkan satu set kaedah, pembolehubah dan peraturan yang menyediakan antara muka pangkalan data standard.

Langkah mudah untuk memasang modul DBI pada mesin Linux/UNIX ditunjukkan di bawah:

$ 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

Jika anda perlu memasang pemacu SQLite untuk DBI, maka anda boleh mengikuti langkah ini untuk memasangnya:

$ 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 Antara Muka DBI

Berikut ialah program DBI penting yang boleh memenuhi keperluan anda untuk menggunakan pangkalan data SQLite dalam program Perl. Jika anda memerlukan butiran lanjut, lihat dokumentasi rasmi Perl DBI.

Nombor SiriAPI & Penerangan
1DBI- > ;connect($data_source, "", "", %attr)

Tetapkan sambungan pangkalan data atau sesi ke $data_source yang diminta. Jika sambungan berjaya, objek pemprosesan pangkalan data dikembalikan.

Format sumber data adalah seperti berikut: DBI:SQLite:dbname='test.db'. Di mana SQLite ialah nama pemacu SQLite dan test.db ialah nama fail pangkalan data SQLite. Jika nama fail nama fail diberikan nilai ':memory:', maka ia akan mencipta pangkalan data dalam memori dalam RAM yang hanya akan bertahan untuk tempoh sesi.

Jika nama fail ialah nama fail peranti sebenar, maka ia akan menggunakan nilai parameter ini untuk cuba membuka fail pangkalan data. Jika fail dengan nama itu tidak wujud, fail pangkalan data baharu dengan nama itu akan dibuat.

Anda boleh membiarkan parameter kedua dan ketiga sebagai rentetan kosong, dan parameter terakhir digunakan untuk menghantar pelbagai atribut Lihat contoh di bawah untuk mendapatkan butiran.

2$dbh->do($sql)

Rutin ini disediakan dan dilaksanakan Kenyataan SQL yang mudah. Mengembalikan bilangan baris yang terjejas, atau undef jika ralat berlaku. Nilai pulangan -1 bermakna bilangan baris tidak diketahui, tidak berkenaan atau tidak tersedia. Di sini, $dbh ialah pemegang yang dikembalikan oleh panggilan DBI->connect().

3$dbh->prepare($sql)

Rutin ini ialah enjin pangkalan data Pelaksanaan seterusnya menyediakan pernyataan dan mengembalikan objek pemprosesan pernyataan.

4$sth->execute()

Rutin ini melaksanakan sebarang penyediaan pelaksanaan Pernyataan memerlukan pemprosesan. Mengembalikan undef jika ralat berlaku. Jika dilaksanakan dengan jayanya, sentiasa mengembalikan benar tanpa mengira bilangan baris yang terjejas. Di sini, $sth diproses oleh pernyataan yang dikembalikan oleh panggilan $dbh->prepare($sql).

5$sth->fetchrow_array()

Rutin ini mendapat baris data seterusnya , Dan dikembalikan sebagai senarai yang mengandungi nilai setiap medan. Dalam senarai ini, medan Null akan dikembalikan sebagai nilai undef.

6$DBI::err

Ini bersamaan dengan $h->err. dengan $h ialah sebarang jenis pemprosesan, seperti $dbh, $sth, atau $drh. Program ini mengembalikan kod ralat enjin pangkalan data untuk kaedah pemacu terakhir yang dipanggil.

7$DBI::errstr

Ini bersamaan dengan $h->errstr. dengan $h ialah sebarang jenis pemprosesan, seperti $dbh, $sth, atau $drh. Program ini mengembalikan mesej ralat enjin pangkalan data untuk kaedah DBI terakhir yang dipanggil.

8$dbh->disconnect()

Rutin ditutup sebelum menghubungi DBI- >connect() Sambungan pangkalan data dibuka.

Menyambung ke Pangkalan Data

Kod Perl berikut menunjukkan cara menyambung ke pangkalan data sedia ada. Jika pangkalan data tidak wujud, ia akan dibuat dan objek pangkalan data akan dikembalikan.

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

Sekarang, mari jalankan program di atas untuk mencipta pangkalan data kami test.db dalam direktori semasa. Anda boleh menukar laluan mengikut keperluan. Simpan kod di atas ke dalam fail sqlite.pl dan laksanakannya seperti yang ditunjukkan di bawah. Jika pangkalan data berjaya dibuat, mesej seperti yang ditunjukkan di bawah akan dipaparkan:

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

Membuat jadual

Coretan kod Perl berikut akan digunakan untuk mencipta jadual dalam pangkalan data yang dibuat sebelum ini :

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

Apabila program di atas dilaksanakan, ia akan mencipta jadual SYARIKAT dalam test.db dan memaparkan mesej yang ditunjukkan di bawah:

Opened database successfully
Table created successfully

Nota: Jika sekiranya anda melihat ralat berikut dalam mana-mana operasi:

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

Dalam kes ini, anda telah menghidupkan dbdimp yang tersedia dalam fail c DBD-SQLite anda, cari sqlite3_prepare () fungsi, dan tukar parameter ketiganya 0 kepada -1. Akhir sekali, gunakan make dan make install untuk memasang DBD::SQLite untuk menyelesaikan masalah. dalam kes ini, anda akan mempunyai fail dbdimp.c terbuka yang tersedia dalam pemasangan DBD-SQLite dan ketahui fungsi sqlite3_prepare() dan tukar argumen ketiganya kepada -1 dan bukannya 0. Akhirnya pasang DBD::SQLite menggunakan buat dan lakukan buat pemasangan untuk menyelesaikan masalah.

operasi INSERT

Atur cara Perl berikut menunjukkan cara mencipta jadual SYARIKAT yang dibuat di atas Rekod:

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

Apabila program di atas dilaksanakan, ia akan mencipta rekod yang diberikan dalam jadual SYARIKAT dan akan memaparkan dua baris berikut:

Opened database successfully
Records created successfully

PILIH operasi

Perl di bawah The program menunjukkan cara untuk mendapatkan dan memaparkan rekod daripada jadual SYARIKAT yang dibuat sebelum ini:

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

Apabila program di atas dilaksanakan, ia menghasilkan keputusan berikut:

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

Kemas kini operasi

di bawah Kod Perl menunjukkan cara mengemas kini sebarang rekod menggunakan pernyataan KEMASKINI dan kemudian dapatkan dan paparkan rekod yang dikemas kini daripada jadual SYARIKAT:

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

Apabila program di atas dilaksanakan, ia menghasilkan keputusan berikut:

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

Kod Perl berikut menunjukkan cara untuk memadam sebarang rekod menggunakan penyata DELETE dan kemudian dapatkan dan paparkan baki rekod daripada jadual SYARIKAT:

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

Apabila program di atas dilaksanakan, ia menghasilkan keputusan berikut:

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

Laman web PHP Cina