SQLite - Perl

Di bab ini, Anda akan mempelajari cara menggunakan SQLite di program Perl.

Instalasi

SQLite3 dapat diintegrasikan dengan Perl menggunakan modul Perl DBI, yang merupakan modul akses database untuk bahasa pemrograman Perl. Ini mendefinisikan satu set metode, variabel, dan konvensi yang menyediakan antarmuka database standar.

Berikut adalah langkah-langkah sederhana untuk menginstal modul DBI di mesin Linux / UNIX Anda -

$ 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 menginstal driver SQLite untuk DBI, maka dapat diinstal sebagai berikut -

$ 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 Antarmuka DBI

Berikut adalah rutinitas DBI yang penting, yang dapat mencukupi kebutuhan Anda untuk bekerja dengan database SQLite dari program Perl Anda. Jika Anda mencari aplikasi yang lebih canggih, Anda dapat melihat dokumentasi resmi Perl DBI.

Sr.No. API & Deskripsi
1

DBI->connect($data_source, "", "", \%attr)

Membuat koneksi database, atau sesi, ke $ data_source yang diminta. Mengembalikan objek pegangan database jika koneksi berhasil.

Sumber data memiliki bentuk seperti - DBI:SQLite:dbname = 'test.db'di mana SQLite adalah nama driver SQLite dan test.db adalah nama file database SQLite. Jika nama file diberikan sebagai':memory:', ini akan membuat database dalam memori dalam RAM yang hanya bertahan selama sesi.

Jika nama file adalah nama file perangkat yang sebenarnya, maka ia mencoba untuk membuka file database dengan menggunakan nilainya. Jika tidak ada file dengan nama itu, maka file database baru dengan nama itu akan dibuat.

Anda menyimpan parameter kedua dan ketiga sebagai string kosong dan parameter terakhir adalah meneruskan berbagai atribut seperti yang ditunjukkan pada contoh berikut.

2

$dbh->do($sql)

Rutinitas ini menyiapkan dan menjalankan satu pernyataan SQL. Mengembalikan jumlah baris yang terpengaruh atau undef pada kesalahan. Nilai kembali -1 berarti jumlah baris tidak diketahui, tidak berlaku, atau tidak tersedia. Di sini, $ dbh adalah handle yang dikembalikan oleh panggilan DBI-> connect ().

3

$dbh->prepare($sql)

Rutin ini menyiapkan pernyataan untuk dieksekusi nanti oleh mesin database dan mengembalikan referensi ke objek pegangan pernyataan.

4

$sth->execute()

Rutin ini melakukan pemrosesan apa pun yang diperlukan untuk menjalankan pernyataan yang disiapkan. Undef dikembalikan jika terjadi kesalahan. Eksekusi yang berhasil selalu mengembalikan nilai true terlepas dari jumlah baris yang terpengaruh. Di sini, $ sth adalah handle pernyataan yang dikembalikan oleh $ dbh-> prepared ($ sql) call.

5

$sth->fetchrow_array()

Rutinitas ini mengambil baris data berikutnya dan mengembalikannya sebagai daftar yang berisi nilai bidang. Bidang kosong dikembalikan sebagai nilai undef dalam daftar.

6

$DBI::err

Ini sama dengan $ h-> err, di mana $ h adalah salah satu tipe pegangan seperti $ dbh, $ sth, atau $ drh. Ini mengembalikan kode kesalahan mesin database asli dari metode driver terakhir yang dipanggil.

7

$DBI::errstr

Ini sama dengan $ h-> errstr, di mana $ h adalah salah satu tipe pegangan seperti $ dbh, $ sth, atau $ drh. Ini mengembalikan pesan kesalahan mesin database asli dari metode DBI terakhir yang dipanggil.

8

$dbh->disconnect()

Rutin ini menutup koneksi database yang sebelumnya dibuka oleh panggilan ke DBI-> connect ().

Terhubung ke Database

Kode Perl berikut menunjukkan cara menyambung ke database yang sudah ada. Jika database tidak ada, maka akan dibuat dan akhirnya objek database 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 kita jalankan program di atas untuk membuat database test.db di direktori saat ini. Anda dapat mengubah jalur Anda sesuai kebutuhan Anda. Simpan kode di atas dalam file sqlite.pl dan jalankan seperti yang ditunjukkan di bawah ini. Jika database berhasil dibuat, maka akan muncul pesan berikut -

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

Buat Tabel

Mengikuti program Perl digunakan untuk membuat tabel pada database yang telah dibuat sebelumnya.

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

Ketika program di atas dijalankan, itu akan membuat tabel PERUSAHAAN di test.db Anda dan akan menampilkan pesan berikut -

Opened database successfully
Table created successfully

NOTE - Jika Anda melihat kesalahan berikut di salah satu operasi -

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

Dalam kasus seperti itu, buka dbdimp.c file tersedia di instalasi DBD-SQLite dan cari tahu sqlite3_prepare() berfungsi dan mengubah argumen ketiganya menjadi -1 bukan 0. Terakhir, instal DBD :: SQLite menggunakan make dan lakukan make install untuk menyelesaikan masalah.

Operasi INSERT

Mengikuti program Perl menunjukkan bagaimana membuat record dalam tabel COMPANY yang dibuat pada contoh di atas.

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

Ketika program di atas dijalankan, itu akan membuat catatan yang diberikan di tabel PERUSAHAAN dan akan menampilkan dua baris berikut -

Opened database successfully
Records created successfully

PILIH Operasi

Mengikuti program Perl menunjukkan bagaimana mengambil dan menampilkan record dari tabel COMPANY yang dibuat pada contoh di atas.

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

Ketika program diatas dijalankan maka akan menghasilkan hasil sebagai 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

UPDATE Operasi

Kode Perl berikut menunjukkan bagaimana pernyataan UPDATE untuk memperbarui catatan apa pun dan kemudian mengambil dan menampilkan catatan yang diperbarui dari tabel PERUSAHAAN.

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

Ketika program diatas dijalankan maka akan menghasilkan hasil sebagai 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

HAPUS Operasi

Mengikuti kode Perl menunjukkan bagaimana menggunakan pernyataan DELETE untuk menghapus semua catatan dan kemudian mengambil dan menampilkan catatan yang tersisa dari tabel PERUSAHAAN -

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

Ketika program diatas dijalankan maka akan menghasilkan hasil sebagai 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