Latest web development tutorials

SQLite - Perl

ติดตั้ง

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
$ ต้า xvfz DBI-1.625.tar.gz
$ Cd DBI-1.625
$ Perl Makefile.PL
$ ให้
$ ให้ติดตั้ง

หากคุณจำเป็นต้องติดตั้งไดรเวอร์ SQLite DBI แล้วสามารถติดตั้งได้โดยทำตามขั้นตอนเหล่านี้:

$ Wget http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/DBD-SQLite-1.11.tar.gz
$ ต้า xvfz DBD-SQLite-1.11.tar.gz
$ Cd-DBD SQLite-1.11
$ Perl Makefile.PL
$ ให้
$ ให้ติดตั้ง

DBI อินเตอร์เฟซ API

ต่อไปนี้เป็นโปรแกรม DBI สิ่งสำคัญที่จะตอบสนองความต้องการของคุณโดยใช้ฐานข้อมูล SQLite ในโปรแกรม Perl หากคุณต้องการรายละเอียดเพิ่มเติมโปรดดูที่เอกสาร Perl DBI อย่างเป็นทางการ

序号API & 描述
1DBI->connect($data_source, "", "", \%attr)

建立一个到被请求的 $data_source 的数据库连接或者 session。如果连接成功,则返回一个数据库处理对象。

数据源形式如下所示:DBI:SQLite:dbname='test.db'。其中,SQLite 是 SQLite 驱动程序名称,test.db 是 SQLite 数据库文件的名称。如果文件名filename赋值为':memory:',那么它将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。

如果文件名 filename 为实际的设备文件名称,那么它将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,那么将创建一个新的命名为该名称的数据库文件。

您可以保留第二个和第三个参数为空白字符串,最后一个参数用于传递各种属性,详见下面的实例讲解。

2$dbh->do($sql)

该例程准备并执行一个简单的 SQL 语句。返回受影响的行数,如果发生错误则返回 undef。返回值 -1 意味着行数未知,或不适用 ,或不可用。在这里,$dbh 是由 DBI->connect() 调用返回的处理。

3$dbh->prepare($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

ใช้ DBI;
ใช้อย่างเข้มงวด

คนขับฉัน $ = "SQLite"; 
$ ฐานข้อมูลของฉัน = "test.db";
$ DSN ของฉัน = "DBI: $ ขับ: dbname = $ ฐานข้อมูล";
$ หมายเลขผู้ใช้ของฉัน = "";
$ รหัสผ่านของฉัน = "";
ฉัน $ dbh = DBI-> เชื่อมต่อ ($ DSN, $ หมายเลขผู้ใช้รหัสผ่าน $ {RaiseError => 1}) 
                      หรือตาย $ DBI :: errstr;

พิมพ์ "ฐานข้อมูลเปิดประสบความสำเร็จ \ n";

ตอนนี้ขอเรียกใช้โปรแกรมดังกล่าวข้างต้นในการสร้างฐานข้อมูลของเราtest.db ในไดเรกทอรีปัจจุบันคุณสามารถเปลี่ยนเส้นทางตามความจำเป็น บันทึกรหัสข้างต้นเพื่อ sqlite.pl ไฟล์และกดแสดงจะดำเนินการดังต่อไปนี้ ถ้าฐานข้อมูลถูกสร้างเสร็จเรียบร้อยก็จะแสดงข้อความที่แสดงด้านล่าง:

$ Chmod + X sqlite.pl
$ ./sqlite.pl
เปิดฐานข้อมูลเรียบร้อยแล้ว

สร้างตาราง

ต่อไปนี้ Perl โค้ดจะใช้ในการสร้างตารางในฐานข้อมูลที่สร้างขึ้นก่อนหน้านี้:

#! / usr / bin / Perl

ใช้ DBI;
ใช้อย่างเข้มงวด

คนขับฉัน $ = "SQLite";
$ ฐานข้อมูลของฉัน = "test.db";
$ DSN ของฉัน = "DBI: $ ขับ: dbname = $ ฐานข้อมูล";
$ หมายเลขผู้ใช้ของฉัน = "";
$ รหัสผ่านของฉัน = "";
ฉัน $ dbh = DBI-> เชื่อมต่อ ($ DSN, $ หมายเลขผู้ใช้รหัสผ่าน $ {RaiseError => 1})
                      หรือตาย $ DBI :: errstr;
พิมพ์ "ฐานข้อมูลเปิดประสบความสำเร็จ \ n";

$ stmt ของฉัน = QQ (CREATE TABLE บริษัท
      (ID INT คีย์หลักไม่เป็นโมฆะ,
       ชื่อ: ข้อความไม่เป็นโมฆะ,
       อายุ INT NOT NULL,
       ที่อยู่ CHAR (50),
       เงินเดือนจริง););
$ RV ของฉัน = $ dbh-> ทำ ($ stmt);
ถ้า ($ RV <0) {
   พิมพ์ $ DBI :: errstr;
} else {
   พิมพ์ "ตารางที่สร้างเสร็จเรียบร้อยแล้ว \ n";
}
$ Dbh-> ยกเลิกการเชื่อมต่อ ();

เมื่อขั้นตอนข้างต้นจะสร้างตาราง บริษัท ในtest.db และแสดงข้อความที่แสดงด้านล่าง:

ฐานข้อมูลเปิดประสบความสำเร็จ
ตารางที่สร้างเสร็จเรียบร้อยแล้ว

หมายเหตุ: หากคุณพบข้อผิดพลาดต่อไปนี้ในการดำเนินการใด ๆ ในกรณีที่คุณเห็นข้อผิดพลาดต่อไปนี้ใน ใด ๆ ของการดำเนินงาน:

DBD :: SQLite :: ST รันล้มเหลว: ไม่ใช่ข้อผิดพลาด (21) ที่บรรทัด dbdimp.c 398

ในกรณีนี้คุณได้เปิด DBD-SQLite ติดตั้งในไฟล์ dbdimp.c ที่มีอยู่พบsqlite3_prepare () ฟังก์ชั่นและมันก็เป็นพารามิเตอร์ที่สาม 0 ถึง -1สุดท้ายใช้ของยี่ห้อและให้ติดตั้งในการติดตั้ง DBD :: SQLite คุณสามารถแก้ปัญหาได้ ในกรณีนี้คุณจะต้องเปิด dbdimp.c ไฟล์ที่มีอยู่ในการติดตั้ง DBD-SQLite และหา sqlite3_prepare () ฟังก์ชั่นและการเปลี่ยนแปลงอาร์กิวเมนต์ที่สามเพื่อ -1 แทน 0. สุดท้ายติดตั้ง DBD :: SQLite ใช้ให้และไม่ให้ติดตั้งในการแก้ไข ปัญหาที่เกิดขึ้น

ดำเนินการแทรก

โปรแกรม Perl ต่อไปนี้แสดงให้เห็นว่าการสร้างระเบียนในตาราง บริษัท สร้างขึ้น:

#! / usr / bin / Perl

ใช้ DBI;
ใช้อย่างเข้มงวด

คนขับฉัน $ = "SQLite";
$ ฐานข้อมูลของฉัน = "test.db";
$ DSN ของฉัน = "DBI: $ ขับ: dbname = $ ฐานข้อมูล";
$ หมายเลขผู้ใช้ของฉัน = "";
$ รหัสผ่านของฉัน = "";
ฉัน $ dbh = DBI-> เชื่อมต่อ ($ DSN, $ หมายเลขผู้ใช้รหัสผ่าน $ {RaiseError => 1})
                      หรือตาย $ DBI :: errstr;
พิมพ์ "ฐานข้อมูลเปิดประสบความสำเร็จ \ n";

$ stmt ของฉัน = QQ (แทรกใน บริษัท (ID ชื่ออายุที่อยู่ Salary)
      VALUES (1, 'พอล', 32, 'แคลิฟอร์เนีย' 20,000.00));
$ RV ของฉัน = $ dbh-> ทำ ($ stmt) หรือตาย $ DBI :: errstr;

$ Stmt = QQ (แทรกใน บริษัท (ID ชื่ออายุที่อยู่ Salary)
      VALUES (2, 'อัลเลน', 25, เท็กซัส '15,000.00));
$ = $ Rv dbh-> ทำ ($ stmt) หรือตาย $ DBI :: errstr;

$ Stmt = QQ (แทรกใน บริษัท (ID ชื่ออายุที่อยู่ Salary)
      VALUES (3, 'เท็ดดี้', 23, 'นอร์เวย์' 20,000.00));
$ = $ Rv dbh-> ทำ ($ stmt) หรือตาย $ DBI :: errstr;

$ Stmt = QQ (แทรกใน บริษัท (ID ชื่ออายุที่อยู่ Salary)
      VALUES (4, 'มาร์ค', 25, 'รวย-Mond' 65,000.00););
$ = $ Rv dbh-> ทำ ($ stmt) หรือตาย $ DBI :: errstr;

พิมพ์ "ประวัติสร้างเสร็จเรียบร้อยแล้ว \ n";
$ Dbh-> ยกเลิกการเชื่อมต่อ ();

โปรแกรมดังกล่าวข้างต้นจะถูกดำเนินการก็จะถูกสร้างขึ้นในตารางของ บริษัท สำหรับการบันทึกรับและแสดงสองบรรทัดต่อไป:

ฐานข้อมูลเปิดประสบความสำเร็จ
ประวัติสร้างเสร็จเรียบร้อยแล้ว

การดำเนินการเลือก

โปรแกรม Perl ต่อไปนี้แสดงให้เห็นว่าจะได้รับจากตาราง บริษัท ที่สร้างขึ้นก่อนหน้านี้และแสดงบันทึก:

#! / usr / bin / Perl

ใช้ DBI;
ใช้อย่างเข้มงวด

คนขับฉัน $ = "SQLite";
$ ฐานข้อมูลของฉัน = "test.db";
$ DSN ของฉัน = "DBI: $ ขับ: dbname = $ ฐานข้อมูล";
$ หมายเลขผู้ใช้ของฉัน = "";
$ รหัสผ่านของฉัน = "";
ฉัน $ dbh = DBI-> เชื่อมต่อ ($ DSN, $ หมายเลขผู้ใช้รหัสผ่าน $ {RaiseError => 1})
                      หรือตาย $ DBI :: errstr;
พิมพ์ "ฐานข้อมูลเปิดประสบความสำเร็จ \ n";

$ stmt ของฉัน = QQ (SELECT id, ชื่อ, ที่อยู่, เงินเดือนจาก บริษัท ;);
ฉัน $ ฏ = $ dbh-> เตรียมความพร้อม ($ stmt);
$ RV ของฉัน = $ sth-> รัน () หรือตาย $ DBI :: errstr;
ถ้า ($ RV <0) {
   พิมพ์ $ DBI :: errstr;
}
ในขณะที่ (ฉัน @row = $ sth-> fetchrow_array ()) {
      พิมพ์ "id =" $ แถว [0] "\ n" .. ;
      . พิมพ์ "NAME =" $ แถว [1] "\ n" .;
      . พิมพ์ "ที่อยู่ =" $ แถว [2] "\ n" .;
      . พิมพ์ "เงินเดือน =" $ แถว [3] "\ n \ n" .;
}
พิมพ์ "การดำเนินการทำสำเร็จ \ n";
$ Dbh-> ยกเลิกการเชื่อมต่อ ();

เมื่อโปรแกรมดังกล่าวข้างต้นจะถูกดำเนินการก็จะให้ผลลัพธ์ที่ต่อไปนี้:

ฐานข้อมูลเปิดประสบความสำเร็จ
ID = 1
NAME = พอล
ADDRESS = แคลิฟอร์เนีย
เงินเดือน = 20000

ID = 2
NAME = อัลเลน
ADDRESS = เท็กซัส
เงินเดือน = 15000

ID = 3
NAME = เท็ดดี้
ADDRESS = นอร์เวย์
เงินเดือน = 20000

ID = 4
NAME = มาร์ค
ADDRESS = รวย-Mond
เงินเดือน = 65000

การดำเนินงานที่ทำสำเร็จ

การดำเนินการปรับปรุง

รหัส Perl ต่อไปนี้แสดงให้เห็นถึงวิธีการใช้คำสั่ง UPDATE ปรับปรุงระเบียนใด ๆ แล้วจะได้รับจากตาราง บริษัท และแสดงบันทึกการปรับปรุง:

#! / usr / bin / Perl

ใช้ DBI;
ใช้อย่างเข้มงวด

คนขับฉัน $ = "SQLite";
$ ฐานข้อมูลของฉัน = "test.db";
$ DSN ของฉัน = "DBI: $ ขับ: dbname = $ ฐานข้อมูล";
$ หมายเลขผู้ใช้ของฉัน = "";
$ รหัสผ่านของฉัน = "";
ฉัน $ dbh = DBI-> เชื่อมต่อ ($ DSN, $ หมายเลขผู้ใช้รหัสผ่าน $ {RaiseError => 1})
                      หรือตาย $ DBI :: errstr;
พิมพ์ "ฐานข้อมูลเปิดประสบความสำเร็จ \ n";

$ stmt = QQ ของฉัน (update บริษัท ได้กำหนดเงินเดือน = 25,000.00 ที่ id = 1;);
$ RV ของฉัน = $ dbh-> ทำ ($ stmt) หรือตาย $ DBI :: errstr;
ถ้า ($ RV <0) {
   พิมพ์ $ DBI :: errstr;
} else {
   พิมพ์ "จำนวนแถว updated: $ RV n \";
}
$ Stmt = QQ (Id SELECT, ชื่อ, ที่อยู่, เงินเดือนจาก บริษัท ;);
ฉัน $ ฏ = $ dbh-> เตรียมความพร้อม ($ stmt);
$ = $ Rv sth-> รัน () หรือตาย $ DBI :: errstr;
ถ้า ($ RV <0) {
   พิมพ์ $ DBI :: errstr;
}
ในขณะที่ (ฉัน @row = $ sth-> fetchrow_array ()) {
      พิมพ์ "id =" $ แถว [0] "\ n" .. ;
      . พิมพ์ "NAME =" $ แถว [1] "\ n" .;
      . พิมพ์ "ที่อยู่ =" $ แถว [2] "\ n" .;
      . พิมพ์ "เงินเดือน =" $ แถว [3] "\ n \ n" .;
}
พิมพ์ "การดำเนินการทำสำเร็จ \ n";
$ Dbh-> ยกเลิกการเชื่อมต่อ ();

เมื่อโปรแกรมดังกล่าวข้างต้นจะถูกดำเนินการก็จะให้ผลลัพธ์ที่ต่อไปนี้:

ฐานข้อมูลเปิดประสบความสำเร็จ
จำนวนแถว updated: 1
ID = 1
NAME = พอล
ADDRESS = แคลิฟอร์เนีย
เงินเดือน = 25000

ID = 2
NAME = อัลเลน
ADDRESS = เท็กซัส
เงินเดือน = 15000

ID = 3
NAME = เท็ดดี้
ADDRESS = นอร์เวย์
เงินเดือน = 20000

ID = 4
NAME = มาร์ค
ADDRESS = รวย-Mond
เงินเดือน = 65000

การดำเนินงานที่ทำสำเร็จ

ดำเนินการลบ

รหัส Perl ต่อไปนี้แสดงให้เห็นถึงวิธีการใช้คำสั่ง DELETE ลบระเบียนใด ๆ และจากนั้นนำมาจากตาราง บริษัท และแสดงการบันทึกที่เหลือ:

#! / usr / bin / Perl

ใช้ DBI;
ใช้อย่างเข้มงวด

คนขับฉัน $ = "SQLite";
$ ฐานข้อมูลของฉัน = "test.db";
$ DSN ของฉัน = "DBI: $ ขับ: dbname = $ ฐานข้อมูล";
$ หมายเลขผู้ใช้ของฉัน = "";
$ รหัสผ่านของฉัน = "";
ฉัน $ dbh = DBI-> เชื่อมต่อ ($ DSN, $ หมายเลขผู้ใช้รหัสผ่าน $ {RaiseError => 1})
                      หรือตาย $ DBI :: errstr;
พิมพ์ "ฐานข้อมูลเปิดประสบความสำเร็จ \ n";

$ stmt ของฉัน = QQ (ลบออกจาก บริษัท ที่ id = 2;);
$ RV ของฉัน = $ dbh-> ทำ ($ stmt) หรือตาย $ DBI :: errstr;
ถ้า ($ RV <0) {
   พิมพ์ $ DBI :: errstr;
} else {
   พิมพ์ "จำนวนแถวที่ถูกลบ: $ RV n \";
}
$ Stmt = QQ (Id SELECT, ชื่อ, ที่อยู่, เงินเดือนจาก บริษัท ;);
ฉัน $ ฏ = $ dbh-> เตรียมความพร้อม ($ stmt);
$ = $ Rv sth-> รัน () หรือตาย $ DBI :: errstr;
ถ้า ($ RV <0) {
   พิมพ์ $ DBI :: errstr;
}
ในขณะที่ (ฉัน @row = $ sth-> fetchrow_array ()) {
      พิมพ์ "id =" $ แถว [0] "\ n" .. ;
      . พิมพ์ "NAME =" $ แถว [1] "\ n" .;
      . พิมพ์ "ที่อยู่ =" $ แถว [2] "\ n" .;
      . พิมพ์ "เงินเดือน =" $ แถว [3] "\ n \ n" .;
}
พิมพ์ "การดำเนินการทำสำเร็จ \ n";
$ Dbh-> ยกเลิกการเชื่อมต่อ ();

เมื่อโปรแกรมดังกล่าวข้างต้นจะถูกดำเนินการก็จะให้ผลลัพธ์ที่ต่อไปนี้:

ฐานข้อมูลเปิดประสบความสำเร็จ
จำนวนแถวที่ถูกลบ: 1
ID = 1
NAME = พอล
ADDRESS = แคลิฟอร์เนีย
เงินเดือน = 25000

ID = 3
NAME = เท็ดดี้
ADDRESS = นอร์เวย์
เงินเดือน = 20000

ID = 4
NAME = มาร์ค
ADDRESS = รวย-Mond
เงินเดือน = 65000

การดำเนินงานที่ทำสำเร็จ