EDV Beratung Kienlein

Wie verbinde ich Star/OpenOffice.org mit einer MYSQL Datenbank
via JDBC ohne ODBC?


Dieses Dokument soll eine einfache Anleitung sein, wie ich mit OpenOffice.org (OOo) eine MySQL-Datenbank benutzen kann, ohne über ODBC darauf zugreifen zu müssen.(Derzeit Version 1.0.2)


MySQL besorgen und installieren:

unter http://www.mysql.com gibt es die Datenbank und ein grafisches Frontend MySQLGUI. Außerdem die aktuellen JDBC-Treiber Connector/J. Ab Version 3.0.2-Beta haben Sie auch schreibenden Zugriff. Ich benutze hier die aktuelle Version 3.0.3-Beta.

Eine wirklich gute Möglichkeit MySQL zu verwalten ist PHPMyAdmin, wozu man allerdings einen laufenden Webserver braucht. Aber auch das ist überhaupt kein Problem, wenn man z.b. PHPTriad oder Foxserver benutzt. Beide sind dazu da, um unter Windows möglichst einfach einen Apache - Webserver, eine MySQL- DB und PHP mit PHPMyAdmin zu installieren
Beide findet man unter : http://sourceforge.net/projects/foxserv bzw. http://sourceforge.net/projects/phptriad
Hier beschreibe ich PHPTriad, da dieses Paket kleiner ist und bis auf die JDBC-Treiber bereits alles dabei ist.
Nach Ausführen des Installationsprogrammes besitzt man einen für lokale Belange (weil ziemlich ungeschützt) geeigneten Apache Webserver mit PHP und PHPMyAdmin + einer MySQL Datenbank. Aber für unsere Zwecke hervorragend geeignet. Als Hauptbenutzer ist standardmäßig root mit leerem Passwort vergeben. Also evtl. ändern bzw. neue Benutzer erstellen und entsprechende Passwörter vergeben. (Aber erst nachdem alles mal läuft und man sich mit einer richtigen Datenbank und mit deren Möglichkeiten besser auskennt.

Mit einem Browser und der Adresse: localhost sollte man überprüfen, ob Apache und PHP läuft. Auch PHPMyAdmin aufrufen, ob MySQL läuft.
Ansonsten über Start => programs => PHPTriad => Apache und MySQL starten. Außerdem sind bei einer Standard-Installation evtl. die Programme winmysqladmin.exe und mysqlmanager.exe sowie evtl. mysql.exe (aus einer DOS-Konsole aufzurufen) hilfreich. Diese finden wir im /bin Verzeichnis also c:\apache\mysql\bin.
Diese Programme benutzen wir aber nur solange, bis mysql läuft, da das Frontend über PHPMyAdmin wesentlich einfacher zu bedienen ist.

Über PHPMyAdmin erstellen wir nun eine neue DB z.b. mydb und legen anschließend eine Tabelle personen mit den folgenden feldern an: (Hier der SQL String, den man auch aus OOo absetzen könnte.)
Außerdem definieren wir p_id als Primary-Key.

CREATE TABLE personen (
p_id int(10) NOT NULL AUTO_INCREMENT,
p_nr int(10),
p_anrede char(20),
p_titel char(20),
p_vname char(30),
p_name char(30),
p_strasse char(30),
p_hnr char(10),
p_land char(3),
p_plz char(5),
p_ort char(30),
p_zusatz char(50),
p_art smallint(6),
p_tel1 char(20),
p_tel2 char(20),
p_telm char(20),
PRIMARY KEY (p_id)
);

Da OOo aber derzeit offensichtlich noch leichte Probleme mit der Erstellung und Pflege der Tabellen über JDBC hat, nimmt man besser eben PHPMyAdmin oder setzt aus OOo ein direktes SQL-Statement ab. Das funktioniert dann wenigstens.

Als nächstes gilt es den JDBC-Treiber zu installieren. Wir haben uns eine Datei geladen, die ungefähr: mysql-connector-java-3.0.0 heißt. Dies ist eine gepackte Datei, die sowohl die eigentliche Treiber-Datei als auch die Source-Codes dazu beinhaltet (falls jemand das ganze selber kompilieren möchte). Zum Entpacken kann man auch FILZIP hernehmen, falls man noch keinen Entpacker hat. Wir haben dann irgendwo ein Verzeichnis: mysql-connector-java-3.0.0 Darin befindet sich neben den Sourcen auch der eigentliche Treiber: mysql-connector-java-3.0.0.jar . Diese Datei kopieren wir einfach in irgendein Verzeichnis, vorzugsweise in das lib/ext -Verzeichnis der installierten Java-Runtimeumgebung, dann erübrigt sich nämlich das umständliche setzen der ClassPath Variablen. Damit das funktioniert, sollte man aber sicherstellen das die jeweilige java.exe geladen wird. Falls sich unter Windows im system32 Verzeichnis eine java.exe befindet, diese einfach löschen oder umbenennen.

Falls man nicht den Weg über das ext Verzeichnis geht, muß dieser Treiber dann noch OOo bekannt gemacht werden.
Seit Version 641D geht das ganze ziemlich einfach.
Unter: Extras => Optionen => Sicherheit
Bei: ClassPath den Pfad auf die jeweilige =>meineTreiberDatei.jar Datei eingeben.
Wirklich diese Datei und nicht nur das Verzeichnis, in der sie sich befindet angeben! Anschließend OpenOffice.org einmal beenden. Achtung, den Quickstarter in der Taskleiste (Windows) nicht vergessen!

Nun können wir OOo starten.
Über Extras => Datenquellen kommen wir in das Menü zur Datenbankverwaltung.
Dort wählen wir <Neue Datenquelle>

Unter Allgemein:
Name: JDBCTest1 (=frei zu vergeben)
Verbindung:
Datenbanktyp: JDBC
Datenquellen-URL: jdbc:mysql://localhost/mydb
wobei localhost auch ein DNS-Name im Netz oder der DNS-Name des eigenen Rechners ist. mydb ist der Name der Datenbank, die wir vorher über PHPMyAdmin erstellt haben.

Unter JDBC:
JDBC Treiberklasse: org.gjt.mm.mysql.Driver (=alter Treiber)
oder: com.mysql.jdbc.Driver (=neuer Treiber)
oder: com.kienlein.mysql.jdbc.Driver (= mein Treiber mit Schreibrechten für OOo)
URL: jdbc:mysql://localhost/mydb (normalerweise nun schon vorbelegt)
Benutzername: root (falls wir in der Benutzerverwaltung von MySQL noch nichts geändert haben)

Passwort erforderlich: lassen wir dann frei
Zeichensatz: System (kann man später bei Bedarf immer noch ändern)

Wenn man nun auf Tabellen geht, sollte unter Alle Tabellen zumindest unsere Personen-Tabelle erscheinen. Hier kann man dann auch weitere Tabellen, Abfragen Verknüpfungen erstellen. In dieses Menü kommt man übrigens sehr leicht mit der F4-Taste.

Somit hat man eine laufende MySQL Datenbank über JDBC angebunden und kann diese auch für Serienbriefe etc. benutzen.

Nun brauchen wir noch die richtigen Schreibrechte. Dazu muß die Tabelle in der table_priv Tabelle von MySQL eingetragen sein. Das kann man entweder mit PHPAdmin oder mit dem Kommandozeilen-Tool mysql.exe machen. Da setzt man einfach ein GRANT ALL PRIVILEGES ON <IhrTabellenName> to <IhrOOoBenutzerName> ab.

Ein Problem hat OOo allerdings noch mit den Auto-Increment Feldern. Die werden zwar vom JDBC Treiber und der Datenbank korrekt ausgeführt, OOo bekommt das aber irgendwie nicht mit. Bis dahin lassen wir einfach AUTO_INCREMENT bei der Tabellenerstellung weg. Obige Tabellenstruktur kann man aber mit meinem DB-Monitor verwenden. Das ist ein Basic-Dialog, der zeigt, wie man damit auf MySQL zugreift. Das Script gibt es auch unter http://kienlein.com/pages/oo.html

Falls hier etwas verbesserungswürdig oder schlichtweg falsch ist, bin ich für jede Anregung dankbar. Ich habe diese Zeilen nur zusammengeschrieben, weil ich selbst lange genug herumprobiert und keine vernünftige Doku gefunden hatte.