ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

DBIプログラミング

 Perlで、DBIモジュールを使って、データベースをアクセスするプログラムの作成方法についてまとめてあります。 データベースは、PostgreSQLを使っています。

DBI/DBDについて

 DBI/DBDモジュールは、Perlで各種データベースをアクセスするためのモジュールです。 DBIモジュールは、データベースに依存しない処理モジュールで、DBDモジュールは、各データベース毎に依存する処理モジュールです。 ここでは、PostgreSQLのDBDモジュールを使っています。

         Perlスクリプト
              |
         DBIモジュール
              |
     +--------+--------+
     |                 |
PostgreSQL対応    ORACLE対応
DBDモジュール     DBDモジュール
     |                 |
 PostgreSQL         ORACLE
データベース      データベース

 DBDモジュールの例としては、以下のものがあります。

モジュール名対応データベース
DBD::PgPostgreSQLデータベース
DBD::OracleORACLEデータベース
DBD::ODBCAccess, SQL-ServerなどのODBC対応データベース

DBIメソッド一覧

 データベースにアクセスするためのDBIメソッドには以下の種類があります。 DBIメソッドには、データベースハンドルメソッド(dbh)と、ステートメントハンドルメソッド(sth)があります。

 ここでは、よく使われるメソッドのみまとめてあります。

メソッド種類機能
connect データベースに接続する
preparedbhSQL文を用意する
dodbhSQL文を実行する
selectall_arrayrefdbh全データを配列の配列参照として取り出す
disconnectdbhデータベースを切り離す
executesthprepareで用意したSQL文を実行する
fetchrow_arraysth行データを項目の配列として取り出す
fetchrow_arrayrefsth行データを項目の配列参照として取り出す
finishsth用意したSQL文を開放する

詳細は、以下のコマンドで、英語版のドキュメントを参照してください。

エラーの参照方法

 DBIでは、直前のメソッドのエラーは、以下の方法で参照できます。

$dbh->err
$sth->err
直前のメソッドのエラーコードが返却
$dbh->errstr
$sth->errstr
直前のメソッドのエラー文字列が返却

DBIメソッドの機能

connect

書式
$dbh = DBI->connect($data_source, $user_name);
機能
connectメソッドは、データベースに接続します。
返却値として、データベースハンドル($dbh)が返ってきます。
このデータベースハンドルは、データベースハンドルメソッドを使うときに必要です。
パラメータ
$data_source データソース
 データベースに依存する情報を以下の形式で設定します。
  dbi:DBDドライバ名:データベース情報

 DBDドライバ名
  DBDドライバ名は使用するドライバによって決められています。
  PostgreSQLのDBDドライバ名は、Pgとなります。

 データベース情報
  データベース情報は、ドライバ毎に書式が異なります。
  PostgreSQLの場合は、以下のパラメータがあります。
   dbname=データベース名;
   host=ホスト名;
   port=ポート番号;

$user_name ユーザ名

データベースハンドルメソッドの機能

prepare

書式
$sth = $dbh->prepare($statement);
機能
prepareメソッドは、SQL文($statement)を実行するための環境を用意します。
SQL文は、perpreメソッドで用意し、executeメソッドで実行し、finishメソッドで終了します。
返却値として、ステートメントハンドル($sth)が返ってきます。
このステートメントハンドルは、ステートメントハンドルメソッドを使うときに必要です。

do

書式
$rv = $dbh->do($statement);
機能
doメソッドは、SQL文($statement)を実行します。
内部的には、prepareし、executeし、finishしています。

selectall_arrayref

書式
$ary_ref = $dbh->selectall_arrayref($statement);
機能
selectall_arrayrefメソッドは、SQL文($statement)を実行し、全データを、配列の配列参照($ary_ref)として取り出します。

disconnect

書式
$rc = $dbh->disconnect();
機能
disconnectメソッドは、接続しているデータベースを切り離します。

ステートメントハンドルメソッドの機能

execute

書式
$rv = $sth->execute();
機能
executeメソッドは、prepareメソッドで用意したSQL文を実行します。
$rvには、処理した件数が返却されます。

fetchrow_array

書式
@ary = $sth->fetchrow_array();
機能
fetchrow_arrayメソッドは、行のデータを、項目の配列(@ary)として取り出します。

fetchrow_arrayref

書式
$ary_ref = $sth->fetchrow_arrayref();
機能
fetchrow_arrayrefメソッドは、行のデータを、項目の配列参照($ary_ref)として取り出します。

finish

書式
$rc = $sth->finish();
機能
 finishメソッドは、prepareメソッドで用意したSQL文を開放します。


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp