Perl+DBI/DBDでFirebirdをアクセス
Perl から Firebird にアクセスするための専用モジュールとして IBPerl と
いうものがありますが、IBPerl は何年か前に開発が終了しており、最近では
DBI によるアクセスが推奨されています。
ここでは、Windows + ActivePerl での入手・インストール法と簡単な使用例
を書きます。
全ての情報は 2004/08/03 現在での最新です。
DBI/DBDとは?
Perlから各種データベースを共通の手段でアクセスするためのモジュールです。
DBDは DBI で使用するドライバで、データベースごとに用意されています。
Firebirdには専用の DBD は今のところ用意されていないようなので、InterBase用
の DBD を使用します。Firebird1.5/IB6.01までの動作が確認されているようです。
他には ODBC 用の DBD も存在しますので、そちらを使用することも可能です。
その場合は、Firebird 用 ODBCドライバも別途に必要となりますし、使用例も
ODBC用に合わせて修正の必要があります。
下準備
ActivePerlを普通にインストールすれば、ppmというコマンドにパスが通ります
ので、これを使用してモジュールのインストールを行います。パスが通っていない
場合は、手動で通しておいてください。
DBDがfbclient.dllを参照しますので、インストールしたFirebirdのbinディレクトリへ実行パスが通っていることを確認してください。
パスが通っていない場合、スクリプト実行時にデータベース接続の段階で失敗します。
DBDの入手
IB用DBDをSourceForgeの開発プロジェクト
から入手します。ソースとppmの2種類があると思いますが、使用にはppmのみを入手
すればとりあえず問題ありません。2004/08/02現在での最新版はV0.43です。
ppm形式をダウンロードする場合は、使用する Perl のバージョンに合っている
ものをダウンロードして下さい。今のところは5.6用と5.8用の2種類があるようです。
zip形式で圧縮されていますので、適当なフォルダに展開してください。
(ここでは、Cドライブの\ExDBD_IBに展開したものとして以後の例を示します)
DBIの入手
ppmコマンドを使用してオンラインで入手します。インストール作業と同時に
行いますので、特にファイルとして入手する必要はありません。
インストール
DBIのインストール
ppmコマンドを使用して、オンラインでモジュールをダウンロードしインストールを 行います。具体的には、
ppm install DBI
とコマンドラインから打ち込みます。ちなみに、インストール済みの場合はその旨
を示すメッセージが出ます。
インストールに成功した場合は、最終的に以下のようなコンソール表示になるはず
です。
C:\>ppm install DBI ==================== Install 'DBI' version 1.43 in ActivePerl 5.8.3.809. ==================== Downloaded 513616 bytes. Extracting 69/69: blib/arch/auto/DBI/Driver_xst.h Installing C:\Perl\site\lib\auto\DBI\dbd_xsh.h Installing C:\Perl\site\lib\auto\DBI\DBI.bs Installing C:\Perl\site\lib\auto\DBI\DBI.dll Installing C:\Perl\site\lib\auto\DBI\DBI.exp Installing C:\Perl\site\lib\auto\DBI\DBI.lib Installing C:\Perl\site\lib\auto\DBI\dbipport.h Installing C:\Perl\site\lib\auto\DBI\dbivport.h Installing C:\Perl\site\lib\auto\DBI\DBIXS.h Installing C:\Perl\site\lib\auto\DBI\dbi_sql.h Installing C:\Perl\site\lib\auto\DBI\Driver.xst Installing C:\Perl\site\lib\auto\DBI\Driver_xst.h Installing C:\Perl\html\bin\dbiprof.html Installing C:\Perl\html\bin\dbiproxy.html Installing C:\Perl\html\site\lib\DBI.html Installing C:\Perl\html\site\lib\Bundle\DBI.html Installing C:\Perl\html\site\lib\DBD\DBM.html Installing C:\Perl\html\site\lib\DBD\File.html Installing C:\Perl\html\site\lib\DBD\Proxy.html Installing C:\Perl\html\site\lib\DBD\Sponge.html Installing C:\Perl\html\site\lib\DBI\Changes.html Installing C:\Perl\html\site\lib\DBI\DBD.html Installing C:\Perl\html\site\lib\DBI\FAQ.html Installing C:\Perl\html\site\lib\DBI\Profile.html Installing C:\Perl\html\site\lib\DBI\ProfileData.html Installing C:\Perl\html\site\lib\DBI\ProfileDumper.html Installing C:\Perl\html\site\lib\DBI\ProxyServer.html Installing C:\Perl\html\site\lib\DBI\PurePerl.html Installing C:\Perl\html\site\lib\DBI\W32ODBC.html Installing C:\Perl\html\site\lib\DBI\Const\GetInfoReturn.html Installing C:\Perl\html\site\lib\DBI\Const\GetInfoType.html Installing C:\Perl\html\site\lib\DBI\Const\GetInfo\ANSI.html Installing C:\Perl\html\site\lib\DBI\Const\GetInfo\ODBC.html Installing C:\Perl\html\site\lib\DBI\DBD\Metadata.html Installing C:\Perl\html\site\lib\DBI\ProfileDumper\Apache.html Installing C:\Perl\html\site\lib\DBI\SQL\Nano.html Installing C:\Perl\html\site\lib\Win32\DBIODBC.html Files found in blib\arch: installing files in blib\lib into architecture dependent library tree Installing C:\Perl\site\lib\DBI.pm Installing C:\Perl\site\lib\Bundle\DBI.pm Installing C:\Perl\site\lib\DBD\DBM.pm Installing C:\Perl\site\lib\DBD\ExampleP.pm Installing C:\Perl\site\lib\DBD\File.pm Installing C:\Perl\site\lib\DBD\NullP.pm Installing C:\Perl\site\lib\DBD\Proxy.pm Installing C:\Perl\site\lib\DBD\Sponge.pm Installing C:\Perl\site\lib\DBI\Changes.pm Installing C:\Perl\site\lib\DBI\DBD.pm Installing C:\Perl\site\lib\DBI\FAQ.pm Installing C:\Perl\site\lib\DBI\Profile.pm Installing C:\Perl\site\lib\DBI\ProfileData.pm Installing C:\Perl\site\lib\DBI\ProfileDumper.pm Installing C:\Perl\site\lib\DBI\ProxyServer.pm Installing C:\Perl\site\lib\DBI\PurePerl.pm Installing C:\Perl\site\lib\DBI\W32ODBC.pm Installing C:\Perl\site\lib\DBI\Const\GetInfoReturn.pm Installing C:\Perl\site\lib\DBI\Const\GetInfoType.pm Installing C:\Perl\site\lib\DBI\Const\GetInfo\ANSI.pm Installing C:\Perl\site\lib\DBI\Const\GetInfo\ODBC.pm Installing C:\Perl\site\lib\DBI\DBD\Metadata.pm Installing C:\Perl\site\lib\DBI\ProfileDumper\Apache.pm Installing C:\Perl\site\lib\DBI\SQL\Nano.pm Installing C:\Perl\site\lib\Win32\DBIODBC.pm Installing C:\Perl\bin\dbiprof Installing C:\Perl\bin\dbiprof.bat Installing C:\Perl\bin\dbiproxy Installing C:\Perl\bin\dbiproxy.bat Successfully installed DBI version 1.43 in ActivePerl 5.8.3.809. C:\>
DBDのインストール
ppmコマンドを使用してインストールを行います。ダウンロードしたファイル
をすべて適当なディレクトリ(今回はC:\ExDBD_IB)に展開しておいてください。
IB用DBDは、現在のところではオンラインインストールは出来ないようです。
インストールを行うには、zipを展開したディレクトリに移動した後に、
ppm install DBD-InterBase.ppd
とコマンドラインから打ち込みます。ちなみに、インストール済みの場合は
その旨を示すメッセージが出ます。
インストールに成功した場合は、最終的に以下のようなコンソール表示に
なるはずです。
C:\>cd ExDBD_IB C:\ExDBD_IB>ppm install DBD-InterBase.ppd ==================== Install 'DBD-InterBase' version 0.43 in ActivePerl 5.8.3.809. ==================== Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.bs Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.dll Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.exp Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.lib Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.pdb Files found in blib\arch: installing files in blib\lib into architecture dependent library tree Installing C:\Perl\site\lib\Bundle\DBD\InterBase.pm Installing C:\Perl\site\lib\DBD\InterBase.pm Installing C:\Perl\site\lib\DBD\InterBase\FAQ.pm Installing C:\Perl\site\lib\DBD\InterBase\GetInfo.pm Successfully installed DBD-InterBase version 0.43 in ActivePerl 5.8.3.809. C:\ExDBD_IB>
スクリプトを実行させて確認
実際に、Perlのスクリプトを走らせて見て動作確認を行います。ActivePerlの 場合、通常は拡張子で関連付けが行われているので、拡張子を".pl"に設定すれば コマンドプロンプトからそのまま実行できます。
接続確認
単純な接続確認です。以下のスクリプトを"test.pl"のファイル名で保存してください。
ホストやデータベースのパスの設定は、環境に合わせて変更する必要があります。
test.plのリスト:
#!/usr/bin/perl # 接続テスト : test.pl use DBI; # パラメータ設定 $host = 'localhost'; $dbpath = 'e:/firebird/TEST.FDB'; $user = 'SYSDBA'; $password = 'masterkey'; # ※ドライバの指定はコロン(:)で、IB/FB用の接続パラメータは # セミコロン(;)で区切らなければならないので注意。 $data_source = 'dbi:InterBase:' . "host=$host;dbname=$dbpath"; $dbh = DBI->connect($data_source, $user, $password); unless($dbh) { print STDERR "Error : connect.\n"; exit -1; } $dbh->disconnect(); print STDERR "Succses.\n";
とりあえず、実行してみましょう。
test.plの実行例(成功時):
C:\>test.pl Succses.
単純SELECT実行
単純なSELECT文の実行です。以下のスクリプトを"select.pl"のファイル名で保存してください。
ホストやデータベースのパスの設定は、環境に合わせて変更する必要があります。
select.plのリスト:
#!/usr/bin/perl # SELECT テスト : select.pl # テーブルの名前は、コマンドライン引数で指定する。 use DBI; # パラメータ設定 $host = 'localhost'; $dbpath = 'e:/firebird/TEST.FDB'; $user = 'SYSDBA'; $password = 'masterkey'; # ※ドライバの指定はコロン(:)で、IB/FB用の接続パラメータは # セミコロン(;)で区切らなければならないので注意。 $data_source = 'dbi:InterBase:' . "host=$host;dbname=$dbpath"; $dbh = DBI->connect($data_source, $user, $password); unless($dbh) { print STDERR "Error : connect.\n"; exit -1; } #クエリの作成 $sql = "SELECT * FROM $ARGV[0]"; $sth = $dbh->prepare($sql); if ($sth) { $sth->execute(); #パラメータ指定はなし while ($result = $sth->fetchrow()) { print "$result\n"; } $sth->finish(); } else { print STDERR "Error : prepare.\n"; } $dbh->disconnect();
コマンドラインでテーブル名を指定して実行します。
select.plの実行例:
C:\>select.pl TEST 1 アイテム�
接続パラメータの説明
DBI::connectで指定する接続パラメータは次のようになっています。
必須項目はデータベース名のみです。大抵はデータベース名とホスト名の指定
程度での使用が多いでしょう。
パラメータ | 説明 | 必須項目 |
database 又はdbname 又はdb | データベース名 | ○ |
host | ホスト名 | |
port | ポート番号 | |
ib_dialect | Dialect数 | |
ib_role | ロール名 | |
ib_charset | キャラクタセットの指定 | |
ib_cache | キャッシュバッファサイズ |
実際の指定は、InterBase用DBD使用の指定と、独自の接続パラメータの指定
を同時に行います。同時の接続パラメータが複数ある場合は、パラメータの間を
セミコロンで区切ります。
例えば、次のような形になります。
$dbh = DBI->connect("dbi:InterBase:dbname=$dbname","sysdba","masterkey");
マルチラインでの指定も可能です。
$dsn =<< "DSN"; dbi:InterBase:dbname=$dbname; host=$host; port=$port; ib_dialect=$dialect; ib_role=$role; ib_charset=$charset; ib_cache=$cache DSN $dbh = DBI->connect($dsn, $username, $password);