perlでsqlite3で作成したDBに接続するコードを書いてみた
perlでsqlite3で作成したDBに接続するコードを書いてテストしてみました。
- 参考にした本
- 準備
- あらかじめ、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; }
コードの内容を自分なりに整理。
- DBI->connect()でデータベースに接続するオブジェクトを生成する
- 上記データベース接続オブジェクトのprepare()メソッドで、引数のSQL文を実行する事ができる、SQL命令オブジェクトを生成。
- 上記SQL命令オブジェクトのexecute()メソッドを実行し、SQL文の実行結果(今回はselect文)がSQL命令オブジェクトに格納される。
- 上記SQL命令オブジェクトに格納された実行結果は、fetchrow_hashrefでワンレコードごと取り出す事が可能。while文で$row変数にワンレコードずつ取り出してプリントしてみた。
{'フィールド名1'=>'データ',
'フィールド名2'=>'データ'
}
の形式のハッシュ(リファレンス)の取り出しに成功。
なんと、めっちゃ簡単に接続してレコードが取り出せてしまった!cpanモジュール、すごい。
※今回の疑問
データベース本体は、どのディレクトリに入れるのが定石?
※格納されるとか、生成するというのは、それぞれデータ等の場所への参照が格納されているイメージを脳内で補完しておくとイメージしやすいかな?