001 | --[[プログラミングガイド]]~ |
002 | *Perl+DBI/DBDでFirebirdをアクセス [#f6d44328] |
003 | Perl から Firebird にアクセスするための専用モジュールとして IBPerl と |
004 | いうものがありますが、IBPerl は何年か前に開発が終了しており、最近では |
005 | DBI によるアクセスが推奨されています。~ |
006 | ここでは、Windows + ActivePerl での入手・インストール法と簡単な使用例 |
007 | を書きます。~ |
008 | 全ての情報は 2004/08/03 現在での最新です。 |
009 |
010 | #contents |
011 |
012 | **DBI/DBDとは? [#p9c1da51] |
013 | Perlから各種データベースを共通の手段でアクセスするためのモジュールです。 |
014 | DBDは DBI で使用するドライバで、データベースごとに用意されています。~ |
015 | Firebirdには専用の DBD は今のところ用意されていないようなので、InterBase用 |
016 | の DBD を使用します。Firebird1.5/IB6.01までの動作が確認されているようです。~ |
017 | 他には ODBC 用の DBD も存在しますので、そちらを使用することも可能です。 |
018 | その場合は、Firebird 用 ODBCドライバも別途に必要となりますし、使用例も |
019 | ODBC用に合わせて修正の必要があります。 |
020 |
021 |
022 | **下準備 [#ucce3ed8] |
023 | ActivePerlを普通にインストールすれば、ppmというコマンドにパスが通ります |
024 | ので、これを使用してモジュールのインストールを行います。パスが通っていない |
025 | 場合は、手動で通しておいてください。~ |
026 | ''DBDがfbclient.dllを参照しますので、インストールしたFirebirdのbinディレクトリへ実行パスが通っていることを確認してください。'' |
027 | パスが通っていない場合、スクリプト実行時にデータベース接続の段階で失敗します。 |
028 |
029 | **DBDの入手 [#b9d22fc3] |
030 | IB用DBDを[[SourceForgeの開発プロジェクト:http://sourceforge.net/projects/dbi-interbase/]] |
031 | から入手します。ソースとppmの2種類があると思いますが、使用にはppmのみを入手 |
032 | すればとりあえず問題ありません。2004/08/02現在での最新版はV0.43です。~ |
033 | ppm形式をダウンロードする場合は、使用する Perl のバージョンに合っている |
034 | ものをダウンロードして下さい。今のところは5.6用と5.8用の2種類があるようです。~ |
035 | zip形式で圧縮されていますので、適当なフォルダに展開してください。 |
036 | (ここでは、Cドライブの\ExDBD_IBに展開したものとして以後の例を示します) |
037 |
038 | **DBIの入手 [#s5049523] |
039 | ppmコマンドを使用してオンラインで入手します。インストール作業と同時に |
040 | 行いますので、特にファイルとして入手する必要はありません。~ |
041 |
042 | **インストール [#nac7172a] |
043 |
044 | ***DBIのインストール [#e7c02c4c] |
045 | ppmコマンドを使用して、オンラインでモジュールをダウンロードしインストールを |
046 | 行います。具体的には、 |
047 | ppm install DBI |
048 | とコマンドラインから打ち込みます。ちなみに、インストール済みの場合はその旨 |
049 | を示すメッセージが出ます。~ |
050 | インストールに成功した場合は、最終的に以下のようなコンソール表示になるはず |
051 | です。 |
052 |
053 | C:\>ppm install DBI |
054 | ==================== |
055 | Install 'DBI' version 1.43 in ActivePerl 5.8.3.809. |
056 | ==================== |
057 | Downloaded 513616 bytes. |
058 | Extracting 69/69: blib/arch/auto/DBI/Driver_xst.h |
059 | Installing C:\Perl\site\lib\auto\DBI\dbd_xsh.h |
060 | Installing C:\Perl\site\lib\auto\DBI\DBI.bs |
061 | Installing C:\Perl\site\lib\auto\DBI\DBI.dll |
062 | Installing C:\Perl\site\lib\auto\DBI\DBI.exp |
063 | Installing C:\Perl\site\lib\auto\DBI\DBI.lib |
064 | Installing C:\Perl\site\lib\auto\DBI\dbipport.h |
065 | Installing C:\Perl\site\lib\auto\DBI\dbivport.h |
066 | Installing C:\Perl\site\lib\auto\DBI\DBIXS.h |
067 | Installing C:\Perl\site\lib\auto\DBI\dbi_sql.h |
068 | Installing C:\Perl\site\lib\auto\DBI\Driver.xst |
069 | Installing C:\Perl\site\lib\auto\DBI\Driver_xst.h |
070 | Installing C:\Perl\html\bin\dbiprof.html |
071 | Installing C:\Perl\html\bin\dbiproxy.html |
072 | Installing C:\Perl\html\site\lib\DBI.html |
073 | Installing C:\Perl\html\site\lib\Bundle\DBI.html |
074 | Installing C:\Perl\html\site\lib\DBD\DBM.html |
075 | Installing C:\Perl\html\site\lib\DBD\File.html |
076 | Installing C:\Perl\html\site\lib\DBD\Proxy.html |
077 | Installing C:\Perl\html\site\lib\DBD\Sponge.html |
078 | Installing C:\Perl\html\site\lib\DBI\Changes.html |
079 | Installing C:\Perl\html\site\lib\DBI\DBD.html |
080 | Installing C:\Perl\html\site\lib\DBI\FAQ.html |
081 | Installing C:\Perl\html\site\lib\DBI\Profile.html |
082 | Installing C:\Perl\html\site\lib\DBI\ProfileData.html |
083 | Installing C:\Perl\html\site\lib\DBI\ProfileDumper.html |
084 | Installing C:\Perl\html\site\lib\DBI\ProxyServer.html |
085 | Installing C:\Perl\html\site\lib\DBI\PurePerl.html |
086 | Installing C:\Perl\html\site\lib\DBI\W32ODBC.html |
087 | Installing C:\Perl\html\site\lib\DBI\Const\GetInfoReturn.html |
088 | Installing C:\Perl\html\site\lib\DBI\Const\GetInfoType.html |
089 | Installing C:\Perl\html\site\lib\DBI\Const\GetInfo\ANSI.html |
090 | Installing C:\Perl\html\site\lib\DBI\Const\GetInfo\ODBC.html |
091 | Installing C:\Perl\html\site\lib\DBI\DBD\Metadata.html |
092 | Installing C:\Perl\html\site\lib\DBI\ProfileDumper\Apache.html |
093 | Installing C:\Perl\html\site\lib\DBI\SQL\Nano.html |
094 | Installing C:\Perl\html\site\lib\Win32\DBIODBC.html |
095 | Files found in blib\arch: installing files in blib\lib into architecture dependent library tree |
096 | Installing C:\Perl\site\lib\DBI.pm |
097 | Installing C:\Perl\site\lib\Bundle\DBI.pm |
098 | Installing C:\Perl\site\lib\DBD\DBM.pm |
099 | Installing C:\Perl\site\lib\DBD\ExampleP.pm |
100 | Installing C:\Perl\site\lib\DBD\File.pm |
101 | Installing C:\Perl\site\lib\DBD\NullP.pm |
102 | Installing C:\Perl\site\lib\DBD\Proxy.pm |
103 | Installing C:\Perl\site\lib\DBD\Sponge.pm |
104 | Installing C:\Perl\site\lib\DBI\Changes.pm |
105 | Installing C:\Perl\site\lib\DBI\DBD.pm |
106 | Installing C:\Perl\site\lib\DBI\FAQ.pm |
107 | Installing C:\Perl\site\lib\DBI\Profile.pm |
108 | Installing C:\Perl\site\lib\DBI\ProfileData.pm |
109 | Installing C:\Perl\site\lib\DBI\ProfileDumper.pm |
110 | Installing C:\Perl\site\lib\DBI\ProxyServer.pm |
111 | Installing C:\Perl\site\lib\DBI\PurePerl.pm |
112 | Installing C:\Perl\site\lib\DBI\W32ODBC.pm |
113 | Installing C:\Perl\site\lib\DBI\Const\GetInfoReturn.pm |
114 | Installing C:\Perl\site\lib\DBI\Const\GetInfoType.pm |
115 | Installing C:\Perl\site\lib\DBI\Const\GetInfo\ANSI.pm |
116 | Installing C:\Perl\site\lib\DBI\Const\GetInfo\ODBC.pm |
117 | Installing C:\Perl\site\lib\DBI\DBD\Metadata.pm |
118 | Installing C:\Perl\site\lib\DBI\ProfileDumper\Apache.pm |
119 | Installing C:\Perl\site\lib\DBI\SQL\Nano.pm |
120 | Installing C:\Perl\site\lib\Win32\DBIODBC.pm |
121 | Installing C:\Perl\bin\dbiprof |
122 | Installing C:\Perl\bin\dbiprof.bat |
123 | Installing C:\Perl\bin\dbiproxy |
124 | Installing C:\Perl\bin\dbiproxy.bat |
125 | Successfully installed DBI version 1.43 in ActivePerl 5.8.3.809. |
126 | |
127 | C:\> |
128 |
129 |
130 | ***DBDのインストール [#va42b45d] |
131 | ppmコマンドを使用してインストールを行います。ダウンロードしたファイル |
132 | をすべて適当なディレクトリ(今回はC:\ExDBD_IB)に展開しておいてください。 |
133 | IB用DBDは、現在のところではオンラインインストールは出来ないようです。~ |
134 | インストールを行うには、zipを展開したディレクトリに移動した後に、 |
135 | ppm install DBD-InterBase.ppd |
136 | とコマンドラインから打ち込みます。ちなみに、インストール済みの場合は |
137 | その旨を示すメッセージが出ます。~ |
138 | インストールに成功した場合は、最終的に以下のようなコンソール表示に |
139 | なるはずです。 |
140 |
141 | C:\>cd ExDBD_IB |
142 | |
143 | C:\ExDBD_IB>ppm install DBD-InterBase.ppd |
144 | ==================== |
145 | Install 'DBD-InterBase' version 0.43 in ActivePerl 5.8.3.809. |
146 | ==================== |
147 | Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.bs |
148 | Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.dll |
149 | Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.exp |
150 | Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.lib |
151 | Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.pdb |
152 | Files found in blib\arch: installing files in blib\lib into architecture dependent library tree |
153 | Installing C:\Perl\site\lib\Bundle\DBD\InterBase.pm |
154 | Installing C:\Perl\site\lib\DBD\InterBase.pm |
155 | Installing C:\Perl\site\lib\DBD\InterBase\FAQ.pm |
156 | Installing C:\Perl\site\lib\DBD\InterBase\GetInfo.pm |
157 | Successfully installed DBD-InterBase version 0.43 in ActivePerl 5.8.3.809. |
158 | |
159 | C:\ExDBD_IB> |
160 |
161 |
162 | **スクリプトを実行させて確認 [#zc8a3705] |
163 | 実際に、Perlのスクリプトを走らせて見て動作確認を行います。ActivePerlの |
164 | 場合、通常は拡張子で関連付けが行われているので、拡張子を".pl"に設定すれば |
165 | コマンドプロンプトからそのまま実行できます。 |
166 |
167 | ***接続確認 [#v089cb8f] |
168 | 単純な接続確認です。以下のスクリプトを"test.pl"のファイル名で保存してください。 |
169 | ホストやデータベースのパスの設定は、環境に合わせて変更する必要があります。~ |
170 | &br; |
171 | test.plのリスト: |
172 |
173 | #!/usr/bin/perl |
174 | # 接続テスト : test.pl |
175 | use DBI; |
176 | |
177 | # パラメータ設定 |
178 | $host = 'localhost'; |
179 | $dbpath = 'e:/firebird/TEST.FDB'; |
180 | $user = 'SYSDBA'; |
181 | $password = 'masterkey'; |
182 | |
183 | # ※ドライバの指定はコロン(:)で、IB/FB用の接続パラメータは |
184 | # セミコロン(;)で区切らなければならないので注意。 |
185 | $data_source = 'dbi:InterBase:' . "host=$host;dbname=$dbpath"; |
186 | |
187 | $dbh = DBI->connect($data_source, $user, $password); |
188 | unless($dbh) { |
189 | print STDERR "Error : connect.\n"; |
190 | exit -1; |
191 | } |
192 | |
193 | $dbh->disconnect(); |
194 | |
195 | print STDERR "Succses.\n"; |
196 | |
197 |
198 | &br; |
199 | とりあえず、実行してみましょう。 |
200 | &br; |
201 | test.plの実行例(成功時): |
202 | |
203 | C:\>test.pl |
204 | Succses. |
205 | |
206 |
207 | ***単純SELECT実行 [#l171c001] |
208 | 単純なSELECT文の実行です。以下のスクリプトを"select.pl"のファイル名で保存してください。 |
209 | ホストやデータベースのパスの設定は、環境に合わせて変更する必要があります。~ |
210 | &br; |
211 | select.plのリスト: |
212 | #!/usr/bin/perl |
213 | # SELECT テスト : select.pl |
214 | # テーブルの名前は、コマンドライン引数で指定する。 |
215 | use DBI; |
216 | |
217 | # パラメータ設定 |
218 | $host = 'localhost'; |
219 | $dbpath = 'e:/firebird/TEST.FDB'; |
220 | $user = 'SYSDBA'; |
221 | $password = 'masterkey'; |
222 | |
223 | # ※ドライバの指定はコロン(:)で、IB/FB用の接続パラメータは |
224 | # セミコロン(;)で区切らなければならないので注意。 |
225 | $data_source = 'dbi:InterBase:' . "host=$host;dbname=$dbpath"; |
226 | |
227 | $dbh = DBI->connect($data_source, $user, $password); |
228 | unless($dbh) { |
229 | print STDERR "Error : connect.\n"; |
230 | exit -1; |
231 | } |
232 | |
233 | #クエリの作成 |
234 | $sql = "SELECT * FROM $ARGV[0]"; |
235 | |
236 | $sth = $dbh->prepare($sql); |
237 | if ($sth) { |
238 | $sth->execute(); #パラメータ指定はなし |
239 | while ($result = $sth->fetchrow()) { |
240 | print "$result\n"; |
241 | } |
242 | $sth->finish(); |
243 | } else { |
244 | print STDERR "Error : prepare.\n"; |
245 | } |
246 | |
247 | $dbh->disconnect(); |
248 | |
249 |
250 | &br; |
251 | コマンドラインでテーブル名を指定して実行します。 |
252 | &br; |
253 | select.plの実行例: |
254 | |
255 | C:\>select.pl TEST |
256 | 1 |
257 | アイテム� |
258 | |
259 |
260 | **接続パラメータの説明 [#yb17e531] |
261 | DBI::connectで指定する接続パラメータは次のようになっています。 |
262 | 必須項目はデータベース名のみです。大抵はデータベース名とホスト名の指定 |
263 | 程度での使用が多いでしょう。~ |
264 |
265 | |パラメータ|説明|必須項目|h |
266 | |database&br;又はdbname&br;又はdb|データベース名|○| |
267 | |host|ホスト名|| |
268 | |port|ポート番号|| |
269 | |ib_dialect|Dialect数|| |
270 | |ib_role|ロール名|| |
271 | |ib_charset|キャラクタセットの指定|| |
272 | |ib_cache|キャッシュバッファサイズ|| |
273 |
274 | 実際の指定は、InterBase用DBD使用の指定と、独自の接続パラメータの指定 |
275 | を同時に行います。同時の接続パラメータが複数ある場合は、パラメータの間を |
276 | セミコロンで区切ります。~ |
277 | 例えば、次のような形になります。 |
278 |
279 | $dbh = DBI->connect("dbi:InterBase:dbname=$dbname","sysdba","masterkey"); |
280 |
281 | マルチラインでの指定も可能です。 |
282 |
283 | $dsn =<< "DSN"; |
284 | dbi:InterBase:dbname=$dbname; |
285 | host=$host; |
286 | port=$port; |
287 | ib_dialect=$dialect; |
288 | ib_role=$role; |
289 | ib_charset=$charset; |
290 | ib_cache=$cache |
291 | DSN |
292 | |
293 | $dbh = DBI->connect($dsn, $username, $password); |