Perl 和 SQLite 数据库操作指南(十三)
- 数据库
- 9小时前
- 1热度
- 0评论
在现代 Web 开发和数据处理中,SQLite 是一种轻量级且功能强大的关系型数据库管理系统。它广泛应用于嵌入式系统、移动应用和小型项目中。本文将详细介绍如何使用 Perl 语言通过 DBI 模块与 SQLite 进行交互,包括安装、连接数据库、创建表、插入数据、查询数据、更新数据和删除数据等操作。
安装 DBI 和 DBD::SQLite 模块
在开始之前,我们需要确保已经安装了 Perl 的 DBI 模块和 SQLite 驱动程序 DBD::SQLite。以下是在 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 驱动程序 DBD::SQLite:
$ 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 installDBI 接口 API
Perl 的 DBI 模块提供了一组标准的数据库访问接口,使得我们可以方便地与多种数据库进行交互。以下是几个常用的 DBI 方法及其描述:
1. 连接数据库
DBI->connect($data_source, "", "", \%attr)此方法用于建立与指定数据源的连接。返回一个数据库处理对象。数据源的形式如下:
DBI:SQLite:dbname='test.db'其中,SQLite 是 SQLite 驱动程序名称,test.db 是 SQLite 数据库文件的名称。如果文件名为 :memory:,则会在内存中创建一个临时数据库。如果文件不存在,则会创建一个新的数据库文件。
2. 执行 SQL 语句
$dbh->do($sql)此方法用于执行简单的 SQL 语句,返回受影响的行数。如果发生错误,返回 undef。
3. 准备 SQL 语句
$dbh->prepare($sql)此方法用于准备一个 SQL 语句,返回一个语句处理对象。
4. 执行预准备的语句
$sth->execute()此方法用于执行预准备的 SQL 语句。如果成功执行,返回 true,否则返回 undef。
5. 获取查询结果
$sth->fetchrow_array()此方法用于获取查询结果的下一行数据,返回一个包含各字段值的列表。如果字段为 NULL,则返回 undef。
6. 获取错误代码
$DBI::err此方法返回最后调用的驱动程序方法的数据库引擎错误代码。
7. 获取错误消息
$DBI::errstr此方法返回最后调用的 DBI 方法的数据库引擎错误消息。
8. 断开数据库连接
$dbh->disconnect()此方法用于关闭之前打开的数据库连接。
连接数据库
以下是一个示例代码,展示如何连接到一个现有的 SQLite 数据库。如果数据库不存在,将会被创建,并返回一个数据库对象。
#!/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";保存上述代码到 sqlite.pl 文件中,并执行:
$ chmod +x sqlite.pl
$ ./sqlite.pl
数据库连接成功创建表
接下来,我们将在 test.db 数据库中创建一个名为 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(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 "表创建成功\n";
}
$dbh->disconnect();执行上述代码后,将会在 test.db 中创建 COMPANY 表,并显示以下消息:
数据库连接成功
表创建成功插入数据
接下来,我们将向 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 表中插入四条记录,并显示以下消息:
数据库连接成功
记录插入成功查询数据
接下来,我们将从 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();执行上述代码后,将会显示 COMPANY 表中的所有记录:
数据库连接成功
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 语句更新 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;
} else {
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();执行上述代码后,将会更新 ID 为 1 的记录的薪水,并显示更新后的所有记录:
数据库连接成功
更新的记录数: 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 语句删除 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;
} else {
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();执行上述代码后,将会删除 ID 为 2 的记录,并显示剩余的所有记录:
数据库连接成功
删除的记录数: 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
操作成功完成总结
通过本文,我们详细介绍了如何使用 Perl 和 SQLite 进行数据库操作,包括安装 DBI 和 DBD::SQLite 模块、连接数据库、创建表、插入数据、查询数据、更新数据和删除数据。希望这些内容能帮助你在实际项目中更好地利用 SQLite 和 Perl 进行数据管理。