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 Siri | API & Penerangan |
---|---|
1 | DBI- > ;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