Perl SQLite: 3

前回の続き。
-- test2.pl
#!/usr/bin/perl
use DBI;
# SQLiteでデータを保存するファイル。
# データベース名となる。
$dbfile = 'dbfile';
# 接続
$dbh = DBI->connect(
'dbi:SQLite:'.$dbfile,
"",
"",
{
AutoCommit => 0, # 毎回自動的にCommit(有:1 無:0)
RaiseError => 1, # 例外発生の有無(有:1 無:0)
PrintError => 1 # 警告生成(有:1 無:0)

}

);
# ここまではほぼ一緒
if(!$dbh) {
# エラー処理。
# ハンドルが作成出来なかった時の動作を書く。
# データベースへのアクセスが出来ない等が考えられるので、終了するほうが良いかも。
# print "error\n";
# exit;
# とか。

} else {
# エラーが無かった時の処理。
# テストだけなら
# print "success\n";
# exit;
# とか。

}
eval {
# 実際にSQLを動かしてみる
$sth = $dbh->prepare('begin;'); # 互換性を追求するならあったほうが良いのかもしれない。
$sth = $dbh->prepare(
# SQL
# SQLiteでは型指定は要らないが、互換性のために書いておくと良い。
'CREATE TABLE test_table ('
.'id INTEGER PRIMARY KEY,'
.'data1 INTEGER,'
.'data2 TEXT'

.');'

);
$sth->execute;

}; # ;を忘れないこと
if($@) {
# クエリに問題があったときどうするか。
# この場合はすでにテーブルが存在していそうだから、ロールバックしてみる。
# 厳密に対処する場合はエラーを参照すること。
$dbh->rollback();
print "error: CREATE TABLE test_table\n";

} else {
# テーブルが存在していない場合は作るっきゃないのでそのままコミット。
$dbh->commit;

}
# 基本的にevalからここまでを繰り返すことになる。
# データを入れてみる。
eval {
$sth = $dbh->prepare('begin;');
$sth = $dbh->prepare(
# idにNULLを入れているのは他と重ならないidを生成するため。
# INTEGER PRIMARY KEYの場合のみ有効。
'INSERT INTO test_table (id, data1, data2) VALUES (NULL, ?, ?);'

);
$sth->execute('data1', time);# 型指定が有効かどうかがわかる。

}; # ;を忘れないこと
if($@) {
# エラー発生時はロールバック。
$dbh->rollback();
print "error: INSERT INTO test_table\n";

} else {
# エラーが無ければコミット。
$dbh->commit;

}
# データを表示する。
eval {
$sth = $dbh->prepare('begin;');
$sth = $dbh->prepare(
# idにNULLを入れているのは他と重ならないidを生成するため。
# INTEGER PRIMARY KEYの場合のみ有効。
'SELECT id, data1, data2 FROM test_table;'

);
$sth->execute();

}; # ;を忘れないこと
if($@) {
# エラー発生時。
print "error: SELECT FROM test_table\n";

} else {
# エラーが無ければ表示。
while(($id, $data1, $data2) = $sth->fetchrow_array) {
print "id : $id\n"; print "data1: $data1\n";
print "data2: $data2\n";

}
# もう使わないから。
$sth->finish;

}
$dbh->disconnect;
__END__

-- test2.pl

さて、結構適当だけどコピー&ペーストで動作することは確認してあります。
何度も実行するとどんどんデータが登録されていくのがわかるはず。
ここまで出来たら、後はSQLのお勉強とか、DBIモジュールにいろいろな関数等が用意されているので、探してみるのも良いかも。

とりあえずこれで終わり。
続きを書くかどうかは決めてません。

参考になれば幸いです。
感想メールとか貰うと喜ぶのでどんどん送ってください。
スパムも面白ければOKです!
でゎわ☆

コメント

このブログの人気の投稿

【解決】YogaBook が再起動を繰り返す

XCP-ngを触ってみて

Hyper-V上にXCP-ng(xen環境)をインストール