Datenbankanbindung allgemein
Inhalt:
Das meistverwendete Datenbanksystem (DBS) im Webbereich dürfte wohl
MySQL? sein. Aber Perl und Datenbanken/Datenbanksysteme werden nicht nur im Webbereich verwendet, sondern noch für viele andere Sachen. In einigen Firmen wird wohl Oracle eine Lösung sein, zu Hause oder in Windows-lastigen Firmen Access oder SQL-Server.
Warum dieser Artikel
Dieser Artikel soll einen Einblick in die Datenbankanbindung allgemein geben. Zum einen wird hier auf eine Datenbanksystem-Unabhängige Lösung eingegangen, aber auch auf DBS angepasste Lösungen und Besonderheiten soll hier eingegangen werden.
Datenbanksystem-Unabhängig
Die - in den meisten Fällen - beste Lösung ist die Verwendung von DBI (Database independent interface). DBI bietet eine Schnittstelle die für jede unterstützte Datenbank gleich ist. Je nach Datenbanksystem muss ein anderer Treiber - die DBD-Module - verwendet werden.
Folgende DBD-Module gibt es zur Zeit:
- DBD::mysql
- DBD::Oracle
- DBD::ODBC
- DBD::CSV
- DBD::Informix
- DBD::InterBase
- DBD::SearchServer / DBD::Fulcrum
- und noch viele mehr (auf CPAN)
Hier ein paar Beispiele, wie der Aufbau der Datenbankverbindung mit DBI und unterschiedlichen Datenbanksystemen:
Anbindung an
MySQL?:
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $user = 'database_user';
my $pass = 'database_password';
my $dsn ='database_name:host';
my $dbh = DBI->connect("DBI:mysql:$dsn",$user,$pass) or die $DBI::errstr;
my $select = 'SELECT * FROM table';
my $sth = $dbh->prepare($select) or die $dbh->errstr();
$sth->execute() or die $dbh->errstr();
while(my @row = $sth->fetchrow_array()){
print "@row";
}
Anbindung an Oracle:
[...]
my $dsn ='database_name';
my $dbh = DBI->connect("DBI:Oracle:$dsn",$user,$pass) or die $DBI::errstr;
[...]
Anbindung an MS-Access:
[...]
my $dsn ='driver=Microsoft Access-Driver (*.mdb); dbq=c:\database.mdb';
my $dbh = DBI->connect("DBI:ODBC:$dsn",$user,$pass) or die $DBI::errstr;
[...]
Achtung Falle!
Bei einigen Systemen muss man auf ein paar Sachen aufpassen. Darauf soll in diesem Teil eingegangen werden. Diese beeinflussen meist nur den DSN-String.
MS-Access und .mdw-Dateien
Access-Datenbanken können besonders geschützt werden. Dazu wird eine Workgroup-Datei anglegt - die .mdw-Datei. Darin werden die Gruppen und die Berechtigungen gespeichert. Mit einer "normalen" Verbindung wird das ganze jetzt fehlschlagen und man wird gebeten, den Administrator der Datenbank um die Rechte zu bitten. Eine kleine Änderung im DSN-String bewirkt aber, dass der Verbindungsaufbau funktioniert.
Im DSN-String muss noch der Key "SystemDB" auftauchen mit dem Pfad zur .mdw-Datei:
[...]
my $dsn ='driver=Microsoft Access-Driver (*.mdb); dbq=c:\database.mdb; SystemDB=c:\sicherheit.mdw';
my $dbh = DBI->connect("DBI:ODBC:$dsn",$user,$pass) or die $DBI::errstr;
[...]
Oracle ohne Umgebungsvariablen und tnsname.ora
Auch hier muss nur der DSN-String etwas geändert werden:
[...]
my $dsn ='host=myhost.com;sid=ORCL';
my $dbh = DBI->connect("DBI:Oracle:$dsn",$user,$pass) or die $DBI::errstr;
[...]
Noch mehr Eigenheiten findet man in den Dokumentationen der einzelnen DBD-Module
Alternativen zu DBI
Die zwei folgenden Punkte nennen ganz andere Ansätze für den Datenbankzugriff. Hier wird auf das
direkte Schreiben von SQL-Statements verzichten und sogenannten Objektrelationales Mapping betrieben.
Das heißt, dass die Tabellen auf Objekte von Klassen gemappt werden.
Die Meinungen darüber gehen auseinander. Einerseits können mit diesen Modulen auch SQL-unerfahrene
Programmierer leicht auf Datenbanken zugreifen, andererseits wird alles etwas langsamer und wenn man
komplizierte Abfragen gestalten will, dann wird es auch mit den Objekten recht kompliziert und es
tauchen wieder viele Begriffe aus dem SQL aus, was den oben genannten Vorteil wieder schwinden lässt.
Class::DBI
Mehr Informationen zu Class::DBI unter
http://www.corion.net/talks/GPW-2005/Einfuehrung-in-Class-DBI.pod.html
DBIx::Class
Alternativen zu DBI (System-Abhängige Lösungen)
Um eine Datenbankverbindung aufzubauen, gibt es nicht nur die Möglichkeit von DBI, sondern auch DBS-spezifische Lösungen. Diese sind nicht so leicht abzuändern, wenn das DBS mal gewechselt wird, bietet aber zum Teil mehr Möglichkeiten, weil es direkt auf das System zugeschnitten ist. So ein Beispiel ist Win32::ODBC, das man benutzen kann, um sich mit einer MS-Access-Datenbank zu verbinden.
Win32::ODBC
Ergänzungen, Kommentare
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff