Perlとdbm
いまでは省みられることも少なくなりましたが,
use strict;
use warnings;
use DB_File;
tie my(%hash), "DB_File", "test" or die $!;
$hash{test} = "hello world";
untie %hash;
tie my(%new_hash), "DB_File", "test" or die $!;
print $new_hash{test}; # hello world
untie %new_hash;
DBperlとDBI
dbmは,
たとえば,
また,
そのような状況を改善するため,
その成果は,
DBIはPerl界標準のインタフェース
DBIという名前はDatabase Interfaceの略語とされていますが,
個々のデータベースエンジンに固有の部分は背後のデータベースドライバ
ODBCとDBIの違い
もちろん同じようなことはODBCなどでもできます。
たとえば,
use strict;
use warnings;
use Win32::ODBC;
my $db = Win32::ODBC->new('sample_db');
$db->Sql('SELECT * FROM foo WHERE id = 1');
while($db->FetchRow) {
my %row = $db->DataHash;
print $row{id}, "\n";
}
$db->Close;
DBIの場合も,
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect('dbi:ODBC:sample_db');
my $sth = $dbh->prepare('SELECT * FROM foo WHERE id = ?');
$sth->execute(1);
while (my $row = $sth->fetchrow_hashref) {
print $row->{id}, "\n";
}
$sth->finish;
$dbh->disconnect;
ただし,
たとえば,
my $row = $dbh->selectrow_hashref('SELECT * FROM foo WHERE id = ?', undef, 1);
print $row->{id}, "\n";
このコードは先頭1行のみを取る例ですが,
my $rows = $dbh->selectall_arrayref('SELECT * FROM foo WHERE id = ?', { Slice => {} }, 1);
for my $row (@$rows) {
print $row->{id}, "\n";
}
速さが気になる場合は,
my $sth = $dbh->prepare('SELECT * FROM foo WHERE id = ?');
$sth->bind_columns(\my $id, \my $name, \my $address);
$sth->execute(1);
while ($sth->fetch) {
print $id, "\n";
}