Perlで、DBIモジュールを使って、データベースをアクセスするプログラムの作成方法についてまとめてあります。 データベースは、PostgreSQLを使っています。
DBI/DBDモジュールは、Perlで各種データベースをアクセスするためのモジュールです。 DBIモジュールは、データベースに依存しない処理モジュールで、DBDモジュールは、各データベース毎に依存する処理モジュールです。 ここでは、PostgreSQLのDBDモジュールを使っています。
Perlスクリプト
|
DBIモジュール
|
+--------+--------+
| |
PostgreSQL対応 ORACLE対応
DBDモジュール DBDモジュール
| |
PostgreSQL ORACLE
データベース データベース
|
DBDモジュールの例としては、以下のものがあります。
| モジュール名 | 対応データベース |
|---|---|
| DBD::Pg | PostgreSQLデータベース |
| DBD::Oracle | ORACLEデータベース |
| DBD::ODBC | Access, SQL-ServerなどのODBC対応データベース |
データベースにアクセスするためのDBIメソッドには以下の種類があります。 DBIメソッドには、データベースハンドルメソッド(dbh)と、ステートメントハンドルメソッド(sth)があります。
ここでは、よく使われるメソッドのみまとめてあります。
| メソッド | 種類 | 機能 |
|---|---|---|
| connect | データベースに接続する | |
| prepare | dbh | SQL文を用意する |
| do | dbh | SQL文を実行する |
| selectall_arrayref | dbh | 全データを配列の配列参照として取り出す |
| disconnect | dbh | データベースを切り離す |
| execute | sth | prepareで用意したSQL文を実行する |
| fetchrow_array | sth | 行データを項目の配列として取り出す |
| fetchrow_arrayref | sth | 行データを項目の配列参照として取り出す |
| finish | sth | 用意したSQL文を開放する |
詳細は、以下のコマンドで、英語版のドキュメントを参照してください。
DBIでは、直前のメソッドのエラーは、以下の方法で参照できます。
| $dbh->err $sth->err | 直前のメソッドのエラーコードが返却 |
| $dbh->errstr $sth->errstr | 直前のメソッドのエラー文字列が返却 |
connectメソッドは、データベースに接続します。 返却値として、データベースハンドル($dbh)が返ってきます。 このデータベースハンドルは、データベースハンドルメソッドを使うときに必要です。
$data_source データソース データベースに依存する情報を以下の形式で設定します。 dbi:DBDドライバ名:データベース情報 DBDドライバ名 DBDドライバ名は使用するドライバによって決められています。 PostgreSQLのDBDドライバ名は、Pgとなります。 データベース情報 データベース情報は、ドライバ毎に書式が異なります。 PostgreSQLの場合は、以下のパラメータがあります。 dbname=データベース名; host=ホスト名; port=ポート番号; $user_name ユーザ名
prepareメソッドは、SQL文($statement)を実行するための環境を用意します。 SQL文は、perpreメソッドで用意し、executeメソッドで実行し、finishメソッドで終了します。 返却値として、ステートメントハンドル($sth)が返ってきます。 このステートメントハンドルは、ステートメントハンドルメソッドを使うときに必要です。
doメソッドは、SQL文($statement)を実行します。 内部的には、prepareし、executeし、finishしています。
selectall_arrayrefメソッドは、SQL文($statement)を実行し、全データを、配列の配列参照($ary_ref)として取り出します。
disconnectメソッドは、接続しているデータベースを切り離します。
executeメソッドは、prepareメソッドで用意したSQL文を実行します。 $rvには、処理した件数が返却されます。
fetchrow_arrayメソッドは、行のデータを、項目の配列(@ary)として取り出します。
fetchrow_arrayrefメソッドは、行のデータを、項目の配列参照($ary_ref)として取り出します。
finishメソッドは、prepareメソッドで用意したSQL文を開放します。