Académique Documents
Professionnel Documents
Culture Documents
Piotr Wydrych
http://kt.agh.edu.pl/~wydrych/
Katedra Telekomunikacji
14 maja 2009
1/42
DataBase Interface.
Standardowy interfejs dost¦pu do bazy danych
niezale»ny od systemu zarz¡dzania relacyjn¡ baz¡
danych.
5/42
DBD
DataBase Driver.
Niezale»ne sterowniki do poszczególnych systemów
(baz danych).
Przykªadowo: DBD::mysql, DBD::Oracle, DBD::Pg.
Obecnie (listopad 2008) okoªo 200 ró»nych
dost¦pnych do pobrania z CPAN.
6/42
ródªo: Alligator Descartes, Tim Bunce: Programming the Perl DBI. O'Reilly, 2000.
ISBN 1-56592-699-4.
7/42
Sk¡d wzi¡¢ DBI i DBD
8/42
Plik tekstowy
Wady i zalety
11/42
Plik tekstowy
Przykªad struktury i operacji
Przykªad
root:x:0:0:Super-User:/root:/bin/bash
Dodawanie danych:
open F, ’>> /etc/passwd’
and printf F ’%s:...’, @user{login, ...};
Pobieranie danych:
open F, ’< /etc/passwd’
and %data = map
{ /(\w+):.../ ? ($1 => {uid => $2, ...}) : () } <F>;
Data::Dumper
Wady i zalety. Przykªady operacji
Pobieranie danych:
open D, ’< data.dump’
and eval join ’’, <D>;
14/42
DBI
Wady i zalety
16/42
np. .
dbi:STEROWNIK:
dbi:mysql:database=mydb:host=sunum
i nazwa u»ytkownika i hasªo.
wªa±ciwo±ci poª¡czenia:
$user $auth
\%attr
Przykªadowo { PrintError => 0 }.
Podstawowe w dokumentacji DBI.
Peªna lista zale»na od u»ytego DBD.
19/42
Zapytania bez zwracania danych
do
$rows = $dbh->do($statement) or die $dbh->errstr;
$rows = $dbh->do($statement, \%attr) or die $dbh->errstr;
$rows = $dbh->do($statement, \%attr, @bind_values)
or die $dbh->errstr;
Przykªad
$sql = ’CREATE TABLE dbmss (
name VARCHAR(20) PRIMARY KEY,
newest_version VARCHAR(20) NOT NULL,
web_page VARCHAR(255)
);’;
$dbh->do($sql)
or die $dbh->errstr;
22/42
Zapytania bez zwracania danych
Przykªad z wykorzystaniem @bind_values
Przykªad
$sql = ’UPDATE dbmss SET newest_version = ?
WHERE name = ?;’;
23/42
Dwie metody:
z odr¦bnym przygotowaniem zapytania,
bez odr¦bnego przygotowania zapytania (czyli ze
zintegrowanym przygotowaniem).
25/42
Przygotowywanie zapytania
prepare
$sth = $dbh->prepare($statement) or die $dbh->errstr;
$sth = $dbh->prepare($statement, \%attr) or die $dbh->errstr;
27/42
@ary = $sth->fetchrow_array;
$hash_ref = $sth->fetchrow_hashref;
$hash_ref = $sth->fetchrow_hashref($name);
Pobieranie danych
W caªo±ci do pami¦ci
fetchall_*
$tbl_ary_ref = $sth->fetchall_arrayref;
$tbl_ary_ref = $sth->fetchall_arrayref($slice);
$tbl_ary_ref = $sth->fetchall_arrayref($slice, $max_rows);
$hash_ref = $sth->fetchall_hashref($key_field);
prepare
execute
nowe warto±ci
np. INSERT
fetchall_* fetchrow_*
N T
defined
31/42
32/42
Zapytania z pobieraniem danych
bez odr¦bnego przygotowania zapytania
selectrow_*
@ary = $dbh->selectrow_array($statement);
@ary = $dbh->selectrow_array($statement, \%attr);
@ary = $dbh->selectrow_array($statement, \%attr, @bind_values);
$ary_ref = $dbh->selectrow_arrayref(...);
$hash_ref = $dbh->selectrow_hashref(...);
Dobre zwyczaje
$sth->finish
Informuje serwer, »e z danego zapytania nie b¦d¡
pobierane ju» »adne dane.
Tylko je»eli skrypt nie pobraª wszystkich krotek.
$dbh->disconnect or warn $dbh->errstr
Rozª¡cza poª¡czenie z baz¡ danych.
Je»eli AutoCommit jest wyª¡czone dziaªanie jest
zale»ne od silnika bazy danych.
Powinno zosta¢ poprzedzone $dbh->commit lub
$dbh->rollback.
http://search.cpan.org/~timb/DBI/DBI.pm
38/42
Bibliograa
T. Bunce.
DBI - Database independent interface for Perl.
http://search.cpan.org/~timb/DBI/DBI.pm.
A. Descartes and T. Bunce.
Programming the Perl DBI.
O'Reilly, 2000.
39/42