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

دليل أساسي لـ SQLite

دليل متقدم لـ SQLite

واجهة برمجة تطبيقات SQLite

Perl في SQLite

التثبيت

يمكن استخدام SQLite3 مع مكتبة Perl DBI لتكامل Perl.مكتبة Perl DBI هي مكتبة الوصول إلى قاعدة البيانات لغة البرمجة Perl.إنها تعريف مجموعة من الطرق والمتغيرات والقواعد التي توفر واجهة قاعدة البيانات المعيارية.

تم عرض الخطوات البسيطة لتثبيت مكتبة DBI على أجهزة 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

إذا كنت بحاجة إلى تثبيت محرك SQLite لـ DBI،يمكنك اتباع الخطوات التالية للاستخدام:

$ 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 واجهة DBI

البرامج المهمة الخاصة بـ DBI أدناه يمكنها تلبية احتياجاتك في استخدام قاعدة بيانات SQLite في برامج Perl.إذا كنت بحاجة إلى مزيد من التفاصيل،يرجى الرجوع إلى وثائق Perl DBI الرسمية.

رقم التسلسلAPI & الوصف
1DBI->connect($data_source, "", "", \%attr)

يتم إنشاء اتصال بقاعدة بيانات أو جلسة يتم طلبها من $data_source.إذا تم اكتمال الاتصال،يتم إرجاع كائن معالجة قاعدة البيانات.

يظهر شكل المصدر البياني كما يلي:DBI:SQLite:dbname='test.db'،حيث أن SQLite هو اسم برنامج قاعدة البيانات SQLite،test.db هو اسم ملف قاعدة البيانات SQLite.إذا كان اسم الملف filename تم تعيينها ك ':memory:'،إذا كان ذلك،فسيقوم بإنشاء قاعدة بيانات ذاكرة في RAM،وذلك سيستمر فقط خلال فترة صلاحية الجلسة.

إذا كان اسم الملف filename هو اسم ملف الجهاز الفعلي، فإنه سيحاول فتح ملف قاعدة البيانات باستخدام هذه القيمة. إذا لم يكن موجودًا ملف بهذا الاسم، سيتم إنشاء ملف جديد يُسمى بنفس الاسم.

يمكنك ترك الثانية والثالثة كنص فارغ، والثاني الأخير لتحويل الخصائص المختلفة، انظر إلى الأمثلة التالية.

2$dbh->do($sql)

يعد هذا الدوالية بإعداد وتنفيذ جملة SQL بسيطة. يعود عدد السطور المتأثرة، إذا حدث خطأ يتم العودة إلى undef. يعني العودة ب -1 أن عدد السطور غير معروف أو غير صالح أو غير متاح. هنا، $dbh هو عامل المعالجة الذي يعود من DBI->connect().

3$dbh->prepare($sql)

يعد هذا الدوالية لإعداد جملة SQL للتنفيذ فيما بعد، ويقوم بتحويلها إلى عامل جملة.

4$sth->execute()

يؤدي هذا الدوالية إلى تنفيذ أي معالجة تحتاج إلى تنفيذ جملة مسبقة التحضير. إذا حدث خطأ، يتم العودة إلى undef. إذا تم تنفيذها بنجاح، فإنها دائمًا تعود إلى true، بغض النظر عن عدد السطور المتأثرة. هنا، $sth هو عامل الجملة الذي يعود من $dbh->prepare($sql).

5$sth->fetchrow_array()

يحصل هذا الدوالية على السطر التالي من البيانات ويقوم بتحويله إلى قائمة تحتوي على قيم الحقول. يتم تحويل الحقل Null إلى قيمة undef في هذه القائمة.

6$DBI::err

هذا يساوي $h->err. حيث، $h هو أي نوع معالجة، مثل $dbh، $sth أو $drh. يعود البرنامج ب رمز خطأ للطريقة الأخيرة التي تم استدعاؤها من الدواء (driver).

7$DBI::errstr

هذا يساوي $h->errstr. حيث، $h هو أي نوع معالجة، مثل $dbh، $sth أو $drh. يعود البرنامج ب رسالة خطأ لآلة قاعدة البيانات للطريقة الأخيرة التي تم استدعاؤها من DBI.

8$dbh->disconnect()

يغلق هذا الدوالية الاتصال بقاعدة البيانات المفتوح عبر DBI->connect().

اتصال بقاعدة البيانات

الكود Perl التالي يوضح كيفية الاتصال بقاعدة بيانات موجودة. إذا لم تكن قاعدة البيانات موجودة، سيتم إنشاؤها، وأخيرًا سيتم العودة إلى عامل قاعدة البيانات.

#!/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 "تم فتح قاعدة البيانات بنجاح\n";

الآن، دعونا نن�行 البرنامج المذكور أعلاه، لإنشاء قاعدة بيانات في الدليل الحالي test.dbيمكنك تغيير المسار حسب الحاجة. احفظ الكود المذكور أعلاه في ملف sqlite.pl، ثم قم بتنفيذ ما يلي. إذا تم إنشاء قاعدة البيانات بنجاح، سيتم عرض الرسالة التالية:

$ chmod +x sqlite.pl
$ ./sqlite.pl
تم فتح قاعدة البيانات بنجاح

إنشاء الجدول

أولاً، سنقوم بإنشاء جدول في قاعدة البيانات التي تم إنشاؤها مسبقًا باستخدام هذا الجزء من البرنامج Perl:

#!/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 "تم فتح قاعدة البيانات بنجاح\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();

عندما يتم تنفيذ البرنامج أعلاه، سيتم test.db لإنشاء جدول COMPANY في الداخل، وعرض الرسالة التالية كما يلي:

تم فتح قاعدة البيانات بنجاح
تم إنشاء الجدول بنجاح

ملاحظة:إذا واجهت أي خطأ أدناه أثناء أي عملية: في حالة رؤيتك للخطأ التالي في أي عملية:

فشل تنفيذ DBD::SQLite::st: ليس خطأ (21) في خط 398 من dbdimp.c

في هذه الحالة، ستجد ملف dbdimp.c المفتوح المتاح في تثبيت DBD-SQLite وابحث عن sqlite3_prepare() وغير المعامل الثالثة إلى -1 بدلاً من 0. في النهاية، استخدم تثبيت و تثبيت البرنامج تثبيت DBD::SQLite لحل المشكلة. في هذه الحالة، سيكون لديك ملف dbdimp.c المفتوح المتاح في تثبيت DBD-SQLite وابحث عن sqlite3_prepare() وغير الثالثة من معاملاته إلى -1 بدلاً من 0. في النهاية، قم بتثبيت DBD::SQLite باستخدام تثبيت ويفعل تثبيت البرنامج لحل المشكلة.

عملية INSERT

برنامج Perl التالي يوضح كيفية إنشاء سجلات في جدول 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 "تم فتح قاعدة البيانات بنجاح\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 "تم إنشاء السجلات بنجاح\n";
$dbh->disconnect();

عند تنفيذ البرنامج المذكور أعلاه، سيتم إنشاء السجلات المحددة في جدول COMPANY ويتم عرض السطور التالية:

تم فتح قاعدة البيانات بنجاح
تم إنشاء السجلات بنجاح

عملية SELECT

برنامج Perl التالي يوضح كيفية الحصول على وتحليل السجلات من جدول 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 "تم فتح قاعدة البيانات بنجاح\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 "تم إكمال العمل بنجاح\n";
$dbh->disconnect();

عندما يتم تنفيذ البرنامج المذكور أعلاه، سيتم إنتاج النتائج التالية:

تم فتح قاعدة البيانات بنجاح
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
تم إكمال العمل بنجاح

عملية UPDATE

كود Perl التالي يوضح كيفية استخدام جملة UPDATE لإضافة أي سجل، ثم الحصول على وتحليل السجلات المعدلة من جدول 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 "تم فتح قاعدة البيانات بنجاح\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 "عدد الأسطر المعدلة بشكل إجمالي: $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 "تم إكمال العمل بنجاح\n";
$dbh->disconnect();

عندما يتم تنفيذ البرنامج المذكور أعلاه، سيتم إنتاج النتائج التالية:

تم فتح قاعدة البيانات بنجاح
عدد الأسطر المعدلة بشكل إجمالي: 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
تم إكمال العمل بنجاح

عملية DELETE

كود Perl التالي يوضح كيفية استخدام جملة DELETE لإزالة أي سجل، ثم الحصول على وتحليل السجلات المتبقية من جدول 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 "تم فتح قاعدة البيانات بنجاح\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 "عدد السطور المزالة بالكامل: $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 "تم إكمال العمل بنجاح\n";
$dbh->disconnect();

عندما يتم تنفيذ البرنامج المذكور أعلاه، سيتم إنتاج النتائج التالية:

تم فتح قاعدة البيانات بنجاح
عدد السطور المزالة بالكامل: 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
تم إكمال العمل بنجاح