# Perl DBI

> 原文： [http://zetcode.com/db/sqliteperltutorial/dbi/](http://zetcode.com/db/sqliteperltutorial/dbi/)

在 SQLite Perl 教程的第一章中，我们将介绍 Perl DBI 模块和 SQLite 数据库。 我们将提供一些定义并显示如何安装必要的元素。

## 先决条件

要使用本教程，我们必须安装 Perl 语言，SQLite 数据库，`sqlite3`命令行工具，Perl `DBI`和`DBD::SQLite`模块。 `DBI`是标准的 Perl 数据库接口。 每个数据库都有其驱动程序。 在我们的例子中，`DBD::SQLite`是 SQLite 数据库的驱动程序。

```perl
$ sudo perl -MCPAN -e shell
cpan> install DBI
cpan[2]> install DBD::SQLite

```

上面的命令显示了如何安装 Perl DBI 和`DBD::SQLite`模块。

## SQLite 数据库

SQLite 是嵌入式关系数据库引擎。 它是一个自包含，无服务器，零配置和事务型 SQL 数据库引擎。 SQLite 实现了 SQL 的大多数 SQL-92 标准。 SQLite 引擎不是独立的进程。 而是将其静态或动态链接到应用。 SQLite 数据库是单个普通磁盘文件，可以位于目录层次结构中的任何位置。

SQLite 附带`sqlite3`命令行工具。 它可用于对数据库发出 SQL 命令。 现在，我们将使用`sqlite3`命令行工具创建一个新数据库。

```perl
$ sqlite3 test.db
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"

```

我们为`sqlite3`工具提供了一个参数。 `test.db`是数据库名称。 它是我们磁盘上的单个文件。 如果存在，则将其打开。 如果不是，则创建它。

```perl
sqlite> .tables
sqlite> .exit
$ ls
test.db

```

`.tables`命令提供了`test.db`数据库中的表列表。 当前没有表。 `.exit`命令终止`sqlite3`命令行工具的交互式会话。 `ls` Unix 命令显示当前工作目录的内容。 我们可以看到`test.db`文件。 所有数据将存储在该单个文件中。

## Perl DBI

Perl `DBI`（数据库接口）是 Perl 编程语言的数据库访问模块。 它定义了一组提供标准数据库接口的方法，变量和约定。 `DBI`还负责驱动程序的动态加载，错误检查和处理，提供方法的默认实现以及许多其他非数据库特定的职责。 `DBI`将方法调用分派到适当的数据库驱动程序。 `DBD`（数据库驱动程序）是一个 Perl 模块，可为特定的数据库引擎转换`DBI`方法。 数据库驱动程序由数据库供应商提供。

```perl
#!/usr/bin/perl

use strict;
use DBI;

my @ary = DBI->available_drivers();
print join("\n", @ary), "\n";

```

该代码示例列出了系统上所有可用的驱动程序。

```perl
use DBI;

```

我们为脚本导入 DBI 模块。

```perl
my @ary = DBI->available_drivers();

```

`available_drivers()`类方法获取系统上所有当前可用的驱动程序。

```perl
print join("\n", @ary), "\n";

```

此行将驱动程序打印到控制台，每个驱动程序都在单独的行上。

```perl
$ ./available_drivers.pl
DBM
ExampleP
File
Gofer
Proxy
SQLite
Sponge
mysql

```

示例输出。

## 常见的 DBI 方法

下表列出了一些常见的 DBI 方法。

| 方法名称 | 描述 |
| --- | --- |
| `available_drivers()` | 返回所有可用驱动程序的列表 |
| `connect()` | 建立与请求的数据源的连接 |
| `disconnect()` | 与数据库服务器断开连接 |
| `prepare()` | 准备要执行的 SQL 语句 |
| `execute()` | 执行预备语句 |
| `do()` | 准备并执行一条 SQL 语句 |
| `bind_param()` | 在预备语句中将值与占位符关联 |
| `bind_col()` | 将 Perl 变量绑定到`SELECT`语句的输出字段 |
| `begin_work()` | 开始新事务 |
| `commit()` | 将最新的一系列未提交的数据库更改写入数据库 |
| `rollback()` | 撤消最近一系列未提交的数据库更改 |
| `quote()` | 引用字符串字面值，以用作 SQL 语句中的字面值 |
| `dump_results()` | 获取所有行并打印 |
| `fetchrow_array()` | 获取下一行作为字段数组 |
| `fetchrow_arrayref()` | 获取下一行作为字段的引用数组 |
| `fetchrow_hashref()` | 获取下一行作为对哈希表的引用 |
| `fetchall_arrayref()` | 以数组的形式获取所有数据 |
| `finish()` | 完成声明并让系统释放资源 |
| `rows()` | 返回受影响的行数 |
| `column_info()` | 提供有关列的信息 |
| `table_info()` | 提供有关表的信息 |
| `primary_key_info()` | 提供有关表中主键的信息 |
| `foreign_key_info()` | 提供有关表中外键的信息 |

## 约定

在使用 Perl DBI 时，Perl 程序员通常使用以下变量名。 在本教程中，我们也将遵守这些约定。

| 变量名 | 描述 |
| --- | --- |
| `$dbh` | 数据库句柄对象 |
| `$sth` | 语句句柄对象 |
| `$drh` | 驱动程序句柄对象（在应用中很少见或使用） |
| `$h` | 上面的任何句柄类型（`$dbh`，`$sth` 或`$drh`） |
| `$rc` | 通用返回码（布尔值：`true = ok`，`false = error`） |
| `$rv` | 一般返回值（通常为整数） |
| `@ary` | 从数据库返回的值列表，通常是一行数据 |
| `$rows` | 处理的行数（如果可用，否则为 -1） |
| `$fh` | 文件句柄 |
| `undef` | NULL 值由 Perl 中的未定义值表示 |
| `\%attr` | 引用传递给方法的属性值的哈希 |

SQLite Perl 教程的这一章介绍了 Perl DBI 模块和 SQLite 数据库。