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

UtilFaqSubForm edit

Titel Datenbankanbindung allgemein
Autor ReneeBaecker
Bereich FaqDatenbanken
Tags
Topic revision: r4 - 2007-06-02 - 22:00:00 - ReneeBaecker
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.