DBI の概要
プログラムにC
や C++
、Java
、Perl
などの種類があるように、データベースにもオラクルやSQL
サーバ、MySQL
などの種類があります。Perl
やそのほかのプログラミング言語には、これらの組み合わせひとつひとつに独自の通信機能を実装する代わりに、『DBI
(データベース・インタフェイス)』という共通の通信手段を提供しています。
DBI
は プログラミング言語からデータベースにアクセスするための『API(アプリケーション・プログラム・インターフェース)』で、データベースにアクセスするための手段と、データベースの種類に依存しないインターフェイスを提供します。データベースの種類に依存しないということは、どのデータベースも同じ方法で操作することができるということです。MySQL
、オラクル、インフォミックス、あるいは他のどんなデータベースに接続するときも、DBMS
の基本構造を知る必要はありません。DBI
によって定義されているAPI
だけをマスターすればよいのです。
次の図は、プログラミング言語からAPI
を通じて、MySQL
やオラクルなどのデータベースに接続するまでの流れを表しています。
図にあるように、プログラムからアクセスするのはAPI
だけです。MySQL
やオラクルなどのDBMS
に直接命令する役目は、そのアプリケーション用のドライバが請け負っています。このようにAPI
を通じてのデータベース操作は、API
だけをマスターすればよいという制作上の利点に加え、データベースのバージョンアップや、データベース自体の変更でさえ手間を掛けることなく実現することができるという運営上の利点もあります。
表記と規約
DBI | 静的トップレベルのクラス名 |
---|---|
$dbh | データベースハンドルオブジェクト |
$sth | ステートメントハンドルオブジェクト |
$drh | ドライバハンドルオブジェクト |
$h | 上記のハンドルのいずれか |
$rc | 一般的な返りコード (ブール: 真=成功、偽=エラー) |
$rv | 一般的な返り値 (典型的に整数) |
@ary | データベースから返される値のリスト。通常はデータの行 |
$rows | 処理された行の数 (なければ-1) |
$fh | ファイルハンドル |
undef | Perl では NULL は未定義( undef ) |
\%attr | メソッドに渡される属性値のハッシュのリファレンス |
一般的なインタフェース規則と注意
セッション
DBI
は、セッションの概念を持っていません。すべてのセッションはconnect
メソッドから返されるハンドル・オブジェクト($dbh)を持ち、このハンドル・オブジェクトは、データベースに関連するメソッドを起動するために使用されます。
文字列と数値
ほとんどのデータは文字列としてPerl
スクリプトに返されます(NULL
値はundef
として返される)。これにより数値データの精度を落とすことなく扱うことができます。文字列が数として使用される場合、Perl
は同じ精度を保てない可能性があります。
日付と時間
日付と時間は、対応するデータベースエンジンの書式で返されます。
バイナリデータのサポート
Perl
スクリプトは文字列のなかにあるバイナリデータをサポートします。DBI
はバイナリデータを変更することなく、ドライバとやりとりします。バイナリデータの扱いはドライバの実装方法に依存します。
SQL
ステートメント
複数のSQL
ステートメントを単一のステートメント・ハンドル($sth)中で組み合わせることはできません。