Albrecht Weinert Labor für Medien und verteilte Anwendungen (MEVA-Lab) Fachbereich Elektrotechnik und Informatik (FB3) der Hochschule Bochum Tipps zu MySQL (mit Java, für Windows) ========================================= Stand V01.01, 03.07.2006 07:41: neu (unfertig) V01.02, 04.07.2006 15:16: StarBase ergänzt V01.05, 05.07.2006 09:31: kl. Ergänz. V01.07, 16.08.2006 09:57: Framework, Logging, Logging-API V01.08, 27.07.2007 08:42: Java 6, Hinweise V01.03, 07.05.2008 16:23: cvs move Sprung & kl. korr. V01.05, 11.06.2008 16:23: Hinweis auf neuere Version Version V.1 Zuletzt geändert von A. Weinert am 23.09.2016 Copyright (c) 2006 Albrecht Weinert. All rights reserved. a-weinert.de Inhalt: 1. Zweck, Voraussetzungen 2. Client - Installation 3. Server - Installation 4. Test des Servers und der Verbindung dorthin 5. Der (clientseitige) Java-Anschluss 6. Framework und Logging 7. Grafische MySQL-Zugänge Anhang A1 Test-Programmschnipsel A2 Server-Konfigurationsdatei nach Installation A3 Abkürzungen 1. Zweck, Voraussetzungen ~~~~~~~~~~~~~~~~~~~~~~ Dieses Tutorial beschreibt die Installation von MySQL (5.0.22) als Datenbank-Server auf einem Windows Server 2003 sowie dessen Nutzung von Windows-Clients und insbesondere von Java-Anwendungen mit JDBC. Hierzu gehört auch der Anschluss der Java-Logging-API u.A. an eine JDBC-DB im Framework de.a_weinert. Über dieses "SQL auch für Java" hinaus ginge der Einsatz von Objekt-wrappern, wie Hibernate. Dies ist hier kein Thema. Man muss sich ja auch fragen, ob das Ertüchtigen einer (mit Dutzenden MB Kode) aufwändigen relationalen DB mit nochmals genauso aufwändigen Verpackungen zu einer doch eher gewaltsamen OO-DB-Lösung ein dauerhaft sinnvoller Ansatz ist. Eine reine Java-OO-Datenbank (dann natürlich ohne alles SQL) bekommt ja schon mit einem .jar-File von etwa 400 kB als installed extension + Nichts. Voraussetzungen: a.) Sie haben die Installationsdateien 16.06.2006 15:53 40.381.545 mysql-noinstall-5.0.22-win32.zip 09.05.2006 12:22 39.016.516 mysql-5.0.21-win32.zip 16.06.2006 15:49 18.843.380 mysql-connector-java-3.1.13.zip oder jüngere Versionen, wie etwa 11.06.2008 15:51 25.445.376 mysql-essential-5.1.25-rc-win32.msi 11.06.2008 15:53 8.811.528 mysql-connector-java-5.1.6.zip b.) Sie haben einen geeigneten Server, vorzugsweise mit Windows Server 2003 und RAID. (In den folgenden Beispielen heißt der Server PD321S). c.) Dieser Server ist in Ihrem Netzwerk (LAN) für alle Ihre Client-Rechner zugänglich und hat genügend Plattenplatz für Ihre dort geplanten relationalen (SQL-) Datenbanken. d.) Sie haben administrativen Zugriff auf diesen Server; es genügt remote-Zugriff. e.) Sie haben auf allen Rechnern, auf denen Sie diese DB mit JDBC anfassen oder sonst arbeiten wollen, ein JDK 1.4.2_10 oder höher als Basis (vernünftig) installiert. Inzwischen lautet die Empfehlung (fast) uneingeschränkt JDK 1.6.0_01 (oder höher). Hinweis: Zum Punkt e.) siehe auch das Dokument java-install.txt, das Sie im selben Verzeichnis wie diesen Text (mysqjawi-tipp.txt) finden. 2. Client - Installation ~~~~~~~~~~~~~~~~~~~~~~ Auf einer Windows-Workstation, die nicht der geplante MySQL-Server ist, aber am selben LAN hängt (Ihr Büro-PC z.B.), installieren Sie die MySQL-Client-Software und die MySQL-Dokumentation. In ein temporäres Verzeichnis (D:\temp\mysql im Beispiel) packen Sie die Datei 16.06.2006 15:53 40.381.545 mysql-noinstall-5.0.22-win32.zip mit dem Kommando D:\temp\mysql>jar xfv \mysql-noinstall-5.0.22-win32.zip aus. Es entsteht ein Unterverzeichnis mysql-5.0.22-win32 mit 1836 Dateien (89,5 MB in 63 Verzeichnissen). Von diesen Dateien ist zunächst 3.259.476 D:\temp\mysql\mysql-5.0.22-win32\Docs\manual.chm wichtig. Diese Windows-Hilfedatei behandelt viele Themen beginnend mit der Installation und sie enthält ein MySQL-Tutorial (Kommandozeile). Diese Datei sollte auf allen betroffenen Rechnern (evt. als Desktop-Verknüpfung) zur Verfügung gestellt werden. Mit anderen Installationen gelieferte .pdf.- Dateien sind absolut Linux-lastig und so im hier gegebenen Zusammenhang i.A. wenig nützlich. Es ist keine schlechte Idee, erst mal ein bisschen in manual.chm zu lesen. Hintergrundinformationen zur im folgenden Kapitel beschriebenen Server- Installation und Hinweise zu evtl. gewünschten Abweichungen finden Sie dort im Kapitel 2.3. Von den beim obigen Auspacken entstandenen Verzeichnis mysql-5.0.22-win32 mit 1836 Dateien und insgesamt 63 Unterverzeichnissen kopieren Sie nur die Verzeichnisse bin, Docs, Embedded und lib einschließlich deren Unterverzeichnisse in Ihr Standardverzeichnis für Programminstallationen, also z.B. nach C:\Programme\MySQL Im Unterverzeichnis Docs brauchen Sie, wie gesagt, nur die Datei manual.chm und auch in den übrigen Verzeichnissen ist für den Client-Betrieb noch viel zu viel drin. Grundtest: Das Kommando D:\temp>C:\Programme\MySQL\bin\mysql.exe --help muss zu einer vielzeiligen Hilfeausgabe führen, die so beginnt: C:\Programme\MySQL\bin\mysql.exe Ver 14.12 Distrib 5.0.22, for Win32 Copyright (C) 2002 MySQL AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license... Um den Pfad (path) nicht unnötig aufzublähen, setzen Sie in Ihr im Pfad enthaltenes Batch-Verzeichnis, i.A. also C:\bat\, eine Datei mySQL.bat des Inhalts: C:\Programme\MySQL\bin\mysql.exe %* 3. Server - Installation ~~~~~~~~~~~~~~~~~~~~~~ In ein geeignetes Verzeichnis auf dem Server z.B. C:\Programme\packedVersions\mySQL kopieren Sie die Datei 09.05.2006 12:22 39.016.516 mysql-5.0.21-win32.zip Wählen und erzeugen Sie ein Grundverzeichnis für ihre MySQL-Installation und die (späteren) Datenbankdateien, z.B: D:\mySQL Dieses Verzeichnis sollte auf einer gut aufgeräumtem (defragmentierten!) Partition mit reichlich Platz für Ihre geplanten Datenbanken liegen, und das, wie gesagt, am besten auf einer RAID-Partition (Datensicherheit, Performance). Erzeugen Sie dort ein Hilfsverzeichnis D:\mySQL\auspack und wechseln Sie dorthin. D:\mySQL\auspack kann später samt Inhalt gelöscht werden. Auspacken mit D:\mySQL\auspack>jar xfv C:\Programme\packedVersions\mySQL\mysql-5.0.21-win32.zip ergibt genau eine Datei 03.07.2006 09:17 40.055.900 Setup.exe Das Starten dieser .exe-Date und das sinngemäß und sinnvoll Antworten in 20 aufeinander folgenden Bildlein installiert und startet den MySQL-Server. Die in dieser beispielhaften Serverinstallation gegebenen Antworten sind aus diesen 20 Bildern im Archiv 03.07.2006 12:05 1.425.677 mysql-inst-verl.zip ersichtlich. mysql-inst-verl.zip finden Sie im selben Verzeichnis, wie dieses Dokument mysqjawi-tipp.txt. Ein angeblich aufgetretenes Problem beim Setzen der Nutzerrechte war nach einem befohlenen Wiederholungsversuch weg. Hinweis: Trotz gut gemachter gelungener Windows-Server-Installation ist MySQL (leider) Linux-Software von jener weitverbreiteten Sorte, die null Ahnung von Betriebssystemkonten und ACLs hat. MySQL bringt also eine eigene Benutzerverwaltung mit -- auch wenn man es als Windows- (AD-) Admin mit schon Tausenden von gut verwalteten Nutzerkonten kaum fassen mag. Geben Sie also dem MySQL-Benutzerkonto root im Verlauf der obigen Installation ein eigenes Passwort -- und vergessen Sie dieses nicht. 4. Test des Servers und der Verbindung dorthin ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Gehen Sie wieder zum in Kapitel 2 (siehe oben) eingerichteten Clientrechner, auf dem ja das Kommando D:\temp>C:\Programme\MySQL\bin\mysql.exe --help bereits zur vielzeiligen Hilfeausgabe führte. Um den in Kapitel 3 installierten Server zu testen, führt man am besten ein paar Beispiele aus dem Tutorial (Kapitel 3 von manual.chm) aus. Ein erfolgreicher Verbindungsversuch muss etwa so aussehen: D:\temp>C:\Programme\MySQL\bin\mysql.exe -h PD321S -u root -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 5.0.21-community-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> Wenn das geht, funktioniert die Server-Installation, MySQL läuft dort als Dienst, der Server, hier PD321S, ist über das LAN erreichbar, Rechnernamen werden vom DNS korrekt aufgelöst etc. Fehlerfall: Wenn dieser Verbindungsaufbau fehlschlägt, sind die weitere MySQL-Versuche am Client zunächst sinnlos. Falls Sie den Server vom selben Client-Rechner aus remote installiert haben, ist die Grunderreichbarkeit natürlich gegeben. Sonst beginnt die Fehlersuche am besten mit D:\temp>ping PD321S und überprüft der Reihe nach alle oben genannten Vorraussetzungen. Gutfall: Falls der obige Verbindungsversuch gelang, sieht man das "mysql>". Dies ist die Eingabeaufforderung (prompt) für Kommandos an den MySQL-Server auf PD321S (im Beispiel). Eine Anfrage, die nur SQL-Funktionen aber noch keine Datenbank betrifft, muss nun schon unabhängig von installierten Datenbanken (Schemata und Tabellen und DB-Nutzerrechten funktionieren, beispielsweise so: mysql> SELECT VERSION(), user(), CURRENT_DATE; +---------------------+--------------------------+--------------+ | VERSION() | user() | CURRENT_DATE | +---------------------+--------------------------+--------------+ | 5.0.21-community-nt | root@pd30we.fh-bochum.de | 2006-07-03 | +---------------------+--------------------------+--------------+ 1 row in set (0.00 sec) mysql> Die nach der Server-Installation standardmäßig erzeugten Datenbanken (Schemata) erfährt man so: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.01 sec) mysql> Nun könnte man die eigentlichen Datenbankübungen aus dem Tutorial (Haustierverwaltung) durchführen. Evtl. ist schon auch hierfür das Setzen von Nutzerrechten am Server, vgl. das Folgende, erforderlich. In Vorbereitung für Installation und Test des Java-Zugangs verlässt man erst mal den Client und loggt sich (geht auch remote) als root (gemeint ist das spezielle MySQL-Konto, kein Domain-account!) auf dem Server ein D:\mySQL\bin\mysql.exe -h localhost -u root -p Hinweis: Man kann überlegen, ob man sich solche Arbeiten am Server durch entsprechende batch-Dateien (siehe entsprechender Hinweis oben) erleichtert. Eingeloggt (als MySQL-root) bei MySQL am Server führt man folgende Kommandos durch: mysql> create DATABASE testJ; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | | testj | +--------------------+ 4 rows in set (0.00 sec) mysql> grant ALL ON test.* TO 'root'@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql> grant ALL ON test.* TO 'root'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> grant ALL ON testj.* TO 'root'@'localhost' with grant option; Query OK, 0 rows affected (0.00 sec) mysql> grant ALL ON testj.* TO 'root'@'%' with grant option; Query OK, 0 rows affected (0.00 sec) mysql> grant ALL ON test.* TO 'jUser'@'localhost' IDENTIFIED BY 'jUser' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) mysql> grant ALL ON test.* TO 'jUser'@'%' IDENTIFIED BY 'jUser' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) mysql> grant ALL ON testJ.* TO 'jUser'@'%' IDENTIFIED BY 'jUser' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) mysql> grant ALL ON testJ.* TO 'jUser'@'localhost' IDENTIFIED BY 'jUser' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) mysql> quit Mit diesen Kommandos wurde letztlich eine (noch leere) Datenbank testj erzeugt, auf die der MySQL-Nutzer jUser (mit dem tollen Passwort jUser) von überallher Vollzugriff hat. [[Zu klären: Warum ging das nicht mit einer Anmeldung als root von einem Client-Rechner aus, sondern nur mit einer (remote) Anmeldung am MySQL-Server? Annahme Absicht? DBs und Nutzer nur am Server verwalten?]] 5. Der (clientseitige) Java-Anschluss ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Das Auspacken der Datei 16.06.2006 15:49 18.843.380 mysql-connector-java-3.1.13.zip (mit jar xfv <..woImmer..>\mysql-connector-java-3.1.13.zip) in ein temporäres Hilfsverzeichnis liefert verwirrende 3811 Dateien (56,9 MB in 406 Verzeichnissen). Wirklich benötigt man davon nur eine einzige Datei, nämlich 03.07.2006 14:37 456.729 mysql-connector-java-3.1.13-bin.jar wobei es eine frühere Version, nämlich 09.05.2006 13:29 446.464 mysql-connector-java-3.1.12-bin.jar auch tun würde. Ebenso geht die neuere Version 15.05.2007 19:38 527.090 mysql-connector-java-5.0.6-bin.jar 05.03.2008 18:27 703.265 mysql-connector-java-5.1.6-bin.jar deren Erstere allerdings ebensowenig, wie die älteren Java-6-kompatibel ist: keine der hinzugekommene Methoden ist implementiert; und der direkte oder indirekte Verwendungsversuch wird mit java.lang.AbstractMethodError "belohnt". Selbst etwas so Nützliches wie Connection.isValid() geht in der neuesten genannten Version immer noch nicht. Diese eine Datei, mysql-connector-java-x.y.z-bin.jar, installiert man als "installed extension", sprich i.A. nach C:\Programme\jdk\jre\lib\ext\mysql-connector.jar Das ist -- eine vernünftige JDK-Grundinstallation vorausgesetzt (siehe Hinweis zu e.) in Kapitel 1) -- dann ohne jedes "class-path-Gefummel" Alles. Punkt. Eclipse kapiert es auch, wenn auch evtl. erst nach einer Neudefinition des "build path" für Java-Projekte, auf natürlich C:\Programme\jdk\jre (gemäß dem Beispiel). Nachdem der Java-nach-mySQL-Konnektor installiert wurde, muss eine Java- Anwendung, die die Programmschnipsel aus Anhang A1 enthält, testweise laufen. Das gleiche gilt für Framework basierte JAVA-Applikationen, die indirekt JDBC verwenden z.B. über das Logging; siehe Kapitel 6. Weitere Hinweise und Programmierbeispiele finden sich im Kapitel 23.3 der MySQL-Hilfe Dieses gut geschriebene Kapitel gibt es auch als getrennte .pdf-Datei. Sowohl beim Ausdrucken des Kapitels (Windows-Hilfe-Datei) als auch in der erwähnten .pdf sind längere Programmzeilen, SQL-Anweisungen etc. allerdings einfach abgeschnitten, so dass viele wichtige Informationen fehlen. Im Erfolgsfalle ist das Ziel, Java-Applikationen (Client und Server) eine JDBC-Datenbank zur Verfügung zu stellen, erreicht. Von den Java-nach-MySQL-Konnektoren gibt es noch jeweils eine "-g"-Variante des Java-Archivs, also 03.07.2006 14:37 605.525 mysql-connector-java-3.1.12-bin-g.jar 03.07.2006 14:36 618.954 mysql-connector-java-3.1.13-bin-g.jar Dies sind debug-Varianten, die man grundsätzlich nie verwendet. Der clientseitige Java-Anschluss ist damit bewerkstelligt. Die Installation ist natürlich auf allen Clients zu wiederholen. Für Server, auf denen JDBC für MYSQL laufen soll (Framework-basierte Server-Applikationen, Tomcat-Servlets etc.), wird der Java-nach-MySQL- Konnektor in gleicher Weise benötigt. Dies gilt ggf. auch für denjenigen Server (PD21S in den Beispielen), auf dem der MYSQL-Server installiert ist -- gerade auf diesem möchte man ja i.A. auch Java-Server-Applikationen mit ggf. Datenbankzugriffen laufen lassen. Falls es auf einem Rechner mehrere JDKs oder JREs gibt empfiehlt es sich, den MySQL-Konnektor in jedes JDK und JRE als installed extension zu tun (vgl. nächstes Kapitel). Auf einem Server, auf dem Apache-Tomcat (J2EE-Container) läuft, sollen die Servlets i.A. auch JDBC-Anschluss an die installierte MySQL-Datenbank bekommen. Dann gehört der Konnektor auch als Ergänzung in die Tomcat-Installation also nach C:\Programme\Apache\Tomcat\common\lib\ bzw. dorthin, wohin Sie Ihr Tomcat installiert haben. Siehe auch das Dokument tomcat-tipp.txt (im selben Verzeichnis wie das vorliegende Dokument). 6. Framework und Logging ~~~~~~~~~~~~~~~~~~~~~ Mit der Version weBib_03-38 (15.08.2006 oder neuer) des Frameworks "de.a_weinert.." bietet dieses eine komfortable Unterstützung der Java-Logging-API mit optionalem, echtzeitgerechtem und aus Anwendungssicht transparenten Loggen in eine Datenbank. Die unterstützenden wesentlichen Klassen sind de.frame4j.io.DbLogHelper de.frame4j.io.LogDbFormatter de.frame4j.io.LogDbHandler Weitere Infos dazu finden sich u.A. via http://ai2t.de/java/docs/aWeinertBib/ http://ai2t.de/java/docs/frame4j/ in der Doku. Die vorgegebene Struktur eines LogRecord-Objekts der Java-Logging-API wurde im Framework in eine passende DB-Tabellen-Struktur umgesetzt, die man sich sinngemäß als jeweils so entstanden vorstellen kann: CREATE TABLE IF NOT EXISTS `dBschema`.`dbTablename` ( `id` int(11) NOT NULL auto_increment COMMENT 'prim. key autoinc', `level` int(11) default NULL COMMENT 'Wichtigkeit (gem. Level)', `sequence` int(11) default NULL COMMENT 'sequenceNumber aus LogRecord ', `millies` bigint(20) default NULL COMMENT 'ms seit 1.1.1970 (Java time)', `time` datetime default NULL COMMENT 'bei Eintrag aus millies gen.', `threadID` int(11) default NULL COMMENT 'vom LogRecord-Konstruktor', `loggSite` varchar(49) default NULL COMMENT 'Anlagen- / Applikations-ID', `source` varchar(49) default NULL COMMENT 'Gerät, Dienst (evtl. Klasse)', `method` varchar(49) default NULL COMMENT 'Methode, Vorgang', `exception` varchar(69) default NULL COMMENT 'ggf. Name der Exception', `messageF` varchar(99) default NULL COMMENT 'Botschaftsformat (ggf.)', `param0` varchar(49) default NULL COMMENT 'erster Parameter (ggf.)', `param1` varchar(49) default NULL COMMENT 'zweiter Parameter (ggf.)', `param2` varchar(49) default NULL COMMENT 'dritter Parameter', `param3` varchar(49) default NULL COMMENT 'vierter Parameter ', `param4` varchar(79) default NULL COMMENT 'fünfter und weitere (ggf.)', `message` varchar(299) default NULL COMMENT 'Botschaft, ggf. formatiert / Stacktrace)', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Hinweis: Mit der Version weBib_03-76 (Juni 2007) wird der DB-Logging-Anschluss durch ein automatisches re-connect nach DB- (Verbindungs-) Abstürzen robuster. 7. Grafische MySQL-Zugänge ~~~~~~~~~~~~~~~~~~~~~~~ Neben dem u.A. in Kapitel 4 benutzten MySQL-Kommandozeilenanschluss gibt es natürlich auch einige Tools zum Arbeiten an MySQL-Datenbanken mit graphischer Benutzeroberfläche. Von MySQL selbst gibt es u.A. für die Administrierung und für Abfragen (query) je ein Werkzeug; die Installationsdateien sind: 05.07.2006 14:13 5.260.800 mysql-administrator-1.1.9-win.msi 06.07.2006 08:17 5.383.680 mysql-query-browser-1.1.20-win.msi Ein graphisches DB-Tool hat man allerdings evtl. sowie schon installiert, nämlich StarOffice 8. Für den empfehlenswerten JDBC-Zugang zu einer MySQL-Datenbank mit "StarOffice Base" benötigt StarOffice 8 (als Java-Anwendung) genau den im vorletzten Kapitel beschriebenen und installierten MySQL-Java-Konnektor C:\Programme\jdk\jre\lib\ext\mysql-connector.jar Falls Sie StarOffice so installiert haben, dass es das JRE Ihrer JDK-Installation benutzt, sind Sie mit diesem Punkt fertig. StarOffice gibt hierüber Auskunft und Einstellmöglichkeiten in Extras -> Optionen -> StarOffice -> Java Finden Sie dort einen Eintrag (z.B.) wie "Sun Microsystems Inc. 1.5.0_06" und "Speicherort: C:\Programme\Java\jre1.5.0_06" (beispielsweise), so müssen Sie einfach das o.g. Archiv mysql-connector.jar auch noch nach C:\Programme\Java\jre1.5.0_06\lib\ext kopieren und StarOffice (einschließlich ggf. des nichtsnutzigen Schnellstarters) komplett beenden. Danach können Sie sich mit StarOffice Base mit dem gerade installierten MySQL-Server verbinden mit: Neue Verbindung, Typ MySQL, mit JDBC, Servername (PD321S), Port (3306, default) DB-Namen (testj), Nutzername (jUser), mitPasswort In Klammern stehen die Angaben entsprechend den vorher verwendeten Beispielen, die in Ihrem Fall teilweise anders sein müssen. StarOffice Base verlangt im Erfolgsfalle die Speicherung in einer lokalen Datenbankdatei à la D:\weinert\dbFactory\pd-testj.odb (beispielsweise). Dies ist allerdings verwirrend aber nicht schlimm: StarOffice Base arbeitete nach obigen Angaben und Einstellungen dann trotzdem auf dem MySQL-Server (PD321S im Beispiel) und tut dies nach Schließen / Beenden und wieder Öffnen dieser lokalen DB / Datei auch brav immer wieder. Hinweis: In den Eigenschaften dieser "lokalen" DB sollte man noch passend zur MySQL-Server-Installation Zeichensatz "latin1 / ISO8859-1" setzen. Mit diesem StarOffice Base Zugang kann man nun (mit grafischer BO) Tabellen anlegen, manipulieren, Reports erstellen und drucken etc. pp. Anhang ~~~~~~ A1 Test-Programmschnipsel ~~~~~~~~~~~~~~~~~~~~~~ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import de.a_weinert.App; //:::::::: public class Test extends App { //:::::::: /** Die eigentliche Arbeit des Programms.
*/ public int doIt() { log.println(zweiZeilStartMld().append('\n')); Statement st = null; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection( "jdbc:mysql://pd321s/testj?user=jUser&password=jUser"); log.println(" /// connection object: " + conn); st = conn.createStatement(); } catch (Exception ex) { ex.printStackTrace(log); return 77; } try { // läuft nur beim allerersten Mal ohne Exception st.executeUpdate("create table log (id INTEGER, stamp BIGINT, " + "event VARCHAR(78), source VARCHAR(39))"); } catch (Exception ex) { // i.A. Tabelle-schon-da-Ausnahme ex.printStackTrace(log); log.println(" //// ------------- \n"); } // i.A. Tabelle-schon-da-Ausnahme try { ResultSet rs = st.executeQuery( "select * from log"); log.println(" /// result from log: " + rs); ResultSetMetaData rsmd = rs.getMetaData(); int anzCol = rsmd.getColumnCount(); log.print("\n | " ); for (int i = 1; i <= anzCol; ++i) { log.print(rsmd.getColumnName(i) + " | " ); /// 1..n } for (int i = 1; i <= anzCol; ++i) { log.print(rsmd.getColumnName(i) + " | " ); /// 1..n } while (rs.next()) { // nicht schön, .... log.print("\n | " ); for (int i = 1; i <= anzCol; ++i) { log.print(rs.getObject(i) + " | " ); /// 1..n } } // ... aber man sieht alles. log.println(); st.close(); conn.close(); } catch (Exception ex) { ex.printStackTrace(log); return 77; } return 0; // Alles OK } // doIt } // class Hinweise: Die hier gezeigten Kode-Schnipsel beziehen sich auf eine Framework-basierte Applikation (de.frame4j.util.App-Erbe). Sehen Sie hierzu http://a-weinert.de/java/ http://weinert-automation.de/software/frame4j/erg.zip http://a-weinert.de/frame4j/ und in http://weinert-automation.de/software/frame4j/rev.../frame4j.zip : de/frame4j/demos/HelloFrame4J.java de/frame4j/demos/HelloFrame4J.properties Die beiden letzten Quellen können Sie als Ausgangspunkt für Ihrer MySQL-Java- (Test-) Anwendungen nehmen. Man kann die Anweisungen sinngemäß auch in eine "nackte" main(String[]) tun, aber auf die Dauer lebt man mit dem Framework eh besser. import de.frame4j.util.App; import de.frame4j.util.AppBase; import de.frame4j.io.LogDbHandler; import de.frame4j.util.TextHelper; //..................... public int doIt() { //........................... Logger logDawL = null; try { logDbHandler = DbLogHelper.makeLogDbHandler(dbServer, dbSchema, dbUuser, dbPpassWord, dBtableName); logDawL = makeDbLogger(logDbHandler); } catch (Exception ex) { return errorExit(77, ex); } // So logDawL.logp(Level.INFO, "Anlage", "Aggregat", "starten", args); // oder einfach so logVerbose( "Anlage", "Aggregat", "starten"); logVerbose( "Anlage", "Aggregat", "starten", args); // oder auch Exception ex = new IllegalArgumentException("Das geht so nicht"); logDawL.throwing("rawumms", "padautz", ex); //.............. A2 Server-Konfigurationsdatei nach Installation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Das Folgende ist die my.ini-Datei, welche die Server-Installation des Kapitel 3 oben erzeugt hat, allerdings gekürzt um fast alle Kommentarzeilen. Die fürs Verständnis schon wesentlichen Kommentare finden Sie in den Dateien D:\temp\mysql\mysql-5.0.22-win32\*.ini bzw. dort, wohin Sie die Installationsdatei ausgepackt haben (vgl. Kapitel 2). ---- D:\mySQL\my.ini (Auszug, start) --------- # MySQL Server Instance Configuration File # ---------------------------------------------------------------------- # Generated by the MySQL Server Instance Configuration Wizard # CLIENT SECTION # ---------------------------------------------------------------------- [client] port=3306 [mysql] default-character-set=latin1 # SERVER SECTION # ---------------------------------------------------------------------- [mysqld] port=3306 basedir="D:/mySQL/" datadir="D:/mySQL/Data/" default-character-set=latin1 default-storage-engine=INNODB sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" max_connections=100 query_cache_size=0 table_cache=256 tmp_table_size=52M thread_cache_size=8 #*** MyISAM Specific options myisam_max_sort_file_size=100G myisam_max_extra_sort_file_size=100G myisam_sort_buffer_size=103M key_buffer_size=9M read_buffer_size=64K read_rnd_buffer_size=256K sort_buffer_size=256K #*** INNODB Specific options *** innodb_data_home_dir="D:/Data/" #skip-innodb innodb_additional_mem_pool_size=7M innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=4M innodb_buffer_pool_size=313M innodb_log_file_size=157M innodb_thread_concurrency=8 ---- D:\mySQL\my.ini (Auszug, end) --------- A3 Abkürzungen ~~~~~~~~~~~ AD active directory (Microsofts abgewandeltes LDAP) ACL access control list (Liste mit Zugriffsrechten auf ein Objekt, allgemeine Verwendung, Vorsicht Begriffsdurcheinander) API Application Program Interface BO Bedienoberfläche C/S Client-Server DB Datenbank, data base DBM data base management DBMS Datenbankmanagementsystem (database management system) DSS Decision Support System GUI Graphical User Interface (graphische BO) HTTP Hyper Text Transfer Protocol HW Hardware IP Internet Protocol J2EE Java 2 Enterprise Edition JAR Java Archive. Insbesondere zur Zusammenfassung mehrerer zu einer Anwendung oder einem Applet gehörender Klassen- und sonstigen Dateien. Das Dateiformat entspricht .zip (+ Semantik). JAR JDK-Werkzeug zum Erstellen und Handhaben solcher Archive (.jar, .zip). JDBC Java Database Connectivity (Java Datenbankanschluss) JDK Java Development Kit; der Werkzeugsatz für die Entwicklung mit Java JRE Java Runtime Environment; JDK-Subset ohne Entwicklungswerkzeuge, reine Laufzeitumgebung JVM Java Virtual Machine LAN Local area network; Datennetz für mittlere Entfernungen LDAP Lightweight Directory Access Protocol LGPL Lesser GNU Public License MEVA Labor für Medien und verteilte Anwendungen OLAP Online Analytical Processing OLTP Online Transaction Processing OMG Object Management Group OS Operating System PC Personal Computer R&D Research and Development RAID Redundant array of inexpensive disks TCP Transmission Control Protocol TM Trade Mark (Warenzeichen) W2K Betriebssystem Windows 2000 W2K3 Betriebssystem Windows 2003 XML eXtensible Markup Language