perlでsqlite3で作成したDBに接続するコードを書いてテストしてみました。

  • 参考にした本
    • perl鍋で使っていたcpanモジュールガイドで、DBIのページを参考にスクリプトを書いてみました。
  • 準備
    • あらかじめ、MACにデフォルトで付属しているデータベース、SQLIte3でデータベースとテーブル定義、サンプルレコードを作っておく。
  • やった事
    • DBIをcapnからインストール。
  • 書いたコード
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use DBI;
use Data::Dumper;

my $db = DBI->connect('dbi:SQLite:../database/gakusyuu.db','',''); 
 print Dumper $db;

接続文字列の引数に今回の実行環境、'dbi:SQLite;dbname=DBのパス/DBのファイル名'を設定して実行してみたところ・・・

=> install_driver(SQLite)と怒られる。DBD::SQLite等の各データベースに接続する為のドライバモジュールは別でインストールする必要があるみたい。cpanからDBD::SQLiteをインストールして、もう一度実行。

=>DBIのオブジェクトのハッシュが返されたので、とりあえず成功?

続きのテストコードをサンプルに習って書いてみた。

my $st = $db->prepare('select * from type');
$st->execute();
while (my $row = $st->fetch row){
	print Dumper $row;
} 

コードの内容を自分なりに整理。

  1. DBI->connect()でデータベースに接続するオブジェクトを生成する
  2. 上記データベース接続オブジェクトのprepare()メソッドで、引数のSQL文を実行する事ができる、SQL命令オブジェクトを生成。
  3. 上記SQL命令オブジェクトのexecute()メソッドを実行し、SQL文の実行結果(今回はselect文)がSQL命令オブジェクトに格納される。
  4. 上記SQL命令オブジェクトに格納された実行結果は、fetchrow_hashrefでワンレコードごと取り出す事が可能。while文で$row変数にワンレコードずつ取り出してプリントしてみた。

{'フィールド名1'=>'データ',

'フィールド名2'=>'データ'

}

の形式のハッシュ(リファレンス)の取り出しに成功。

なんと、めっちゃ簡単に接続してレコードが取り出せてしまった!cpanモジュール、すごい。

※今回の疑問

データベース本体は、どのディレクトリに入れるのが定石?

※格納されるとか、生成するというのは、それぞれデータ等の場所への参照が格納されているイメージを脳内で補完しておくとイメージしやすいかな?