Datenbanken unter J++ - Teil 2

Werbung
Virtuelle Lehrerweiterbildung Informatik in Niedersachsen
Datenbanken mit J++
Eckart Modrow
Datenbanken unter J++ - Teil 2
Inhalt:
3. Zugriff auf Datenbanken
3.1 OBDC-Treiber installieren und einrichten
3.2 Auf OBDC-Verknüpfungen zugreifen
3.3 SQL-Abfragen unter J++
Bezug:
G. Krüger, GotoJava 2 – HTML-Version:
Kapitel 42
S. 1
Virtuelle Lehrerweiterbildung Informatik in Niedersachsen
Datenbanken mit J++
Eckart Modrow
S. 2
3. Zugriff auf Datenbanken
3.1 OBDC-Treiber installieren und einrichten
Der Datenzugriff auf Tabellen und Datenbanken von anderen Programmen aus ist unter Windows unter OBDC möglich (Open Database Connectivity). Dafür werden Treiber benötigt,
die die Tabellendaten standardisierter Form aufbereiten. Für Microsoftprodukte sind diese
Treiber natürlich meist schon bei der Installation vorhanden, für andere Programme müssen
sie installiert werden. Als Beispiel wollen wir die anonymisierten Schuldatenbank von Herrn
Beckmann mit mySQL befragen.
1. Dazu müssen wir zuerst den aktuellen
OBDC-Treiber von mySQL im Internet
suchen, herunterladen und installieren.
Ich gebe dazu meist in einer Suchmaschine „mySQL“ ein, erhalte eine der
möglichen Adressen für Downloads
(die ich mir nicht merken will) und suche dort den richtigen Treiber, der von
der Betriebssystemversion abhängt. Für
Windows 2000, -NT und –XP wird der
Treiber myODBC-NT benötigt, derzeit
in der Version 2.50.39. Dieser wird
entpackt und installiert (mit Setup) –
fertig.
2. Jetzt müssen wir mithilfe dieses Treibers eine ODBC-Verknüpfung zu der
gewünschten Datenbank herstellen.
Wir gehen dazu in die WindowsSystemsteuerung und wählen im Ordner Verwaltung den Unterpunkt „Datenquellen (ODBC) Verknüpfung“ o. ä.
Dort klicken wir „Hinzufügen“ an und
wählen den mySQL-Treiber aus (ziemlich weit unten). Danach klicken wir
auf „Fertig stellen“ und geben die für
die Verknüpfung benötigten Daten an:
•
den Namen, unter dem die Verknüpfung erscheinen soll (Windows DSN
name). Hier: Schule
•
den Ort des mySQL-Servers. Läuft der
auf dem gleichen Rechner: localhost.
•
den Namen der (existierenden)
mySQL-Datenbank. Hier: schule
•
den Namen und das Password eines
eingetragenen Benutzers. Hier: emodrow und … (sag ich nicht!)
Virtuelle Lehrerweiterbildung Informatik in Niedersachsen
Datenbanken mit J++
Eckart Modrow
S. 3
3.2 Auf OBDC-Verknüpfungen zugreifen
Jetzt geht es (fast) wie bisher weiter: Unter J++ richten wir eine DataSource-Komponente ein und setzen den Wert der connectionString-Eigenschaft,
indem wir eine existierende ODBC-Verknüpfung
auswählen:
1. Wir wählen als Provider die ODBCVerknüpfung (ist meist voreingestellt).
2. Wir wählen als Verbindung als Datenquellennamen eine der angezeigten Möglichkeiten (hier sollte jetzt „Schule“ erscheinen!).
3. Danach testen wir die Verbindung.
4. Als commandText-Eigenschaft geben wir
einen zulässigen SQL-Befehl ein, z. B.:
select * from schueler;
Jetzt können wir andere Datenzugriffskomponenten
auf diese DataSource einstellen, z. B. ein DataGrid.
In diesem sollten sofort die Ergebnisse der SQLAbfrage angezeigt werden. Wollen wir diese jetzt in
eigenen Programmteilen auswerten, dann können wir
genauso weitermachen wie im letzten Abschnitt:
Diagramme zeichnen, …
3.3 SQL-Abfragen unter J++
Zuletzt wollen wir ein J++-Formular dafür benutzen, direkt SQL-Anfragen an eine Datenbank
einzugeben und deren Ergebnisse in einem DataGrid darzustellen. Das hat nebenbei den Vorteil, von der spartanischen DOS-Box des mySQL-Clients wegzukommen und die Ergebnismenge in einem scrollbaren Fenster zu sehen.
Wir benötigen für dieses Vorhaben nur sehr wenig:
•
eine RichEdit-Komponente, um die Anfragen einzugeben,
•
einen Button, um diese Eingabe auszuwerten
•
und ein DataGrid, um die Ergebnisse der Anfrage darzustellen.
Der Schönheit halber fügen wir noch einen Ende-Button und eine Label-Komponente hinzu,
um ggf. Fehler und die Anzahl der gefundenen Datensätze anzuzeigen. Label und Buttons
platzieren wir auf einem Panel am oberen Bildrand, Editor und Datengitter darunter.
Virtuelle Lehrerweiterbildung Informatik in Niedersachsen
Datenbanken mit J++
Eckart Modrow
S. 4
Editor zur Eingabe
der SQL-Abfrage
hier zeigt sich später das DataGrid
Der Eventhandler des Auswerte-Buttons muss jetzt die Anfrage starten und darstellen. Dazu
gehen wir wie folgt vor:
•
Wir lesen die Zeilen aus dem Editor (namens memo – wie immer) heraus und basteln
daraus einen einzigen langen String namens command.
String [] zeilen = memo.getLines();
String command = "";
for(int i=0;i<zeilen.length;i++)
command = command + zeilen[i] + " ";
•
Danach erzeugen wir eine neue DataSource (namen ds), die wir mit der Datenbank
verbinden, indem wir den ConnectionString entsprechend setzen (s.o.).
DataSource ds = new DataSource();
ds.setConnectionString( "dsn=Schule;uid=emodrow;pwd=XXX");
•
Die SQL-Anfrage (die vorher im Editor eingegeben werden sollte) wird jetzt in die
commandText-Eigenschaft der DataSource geschrieben.
ds.setCommandText( command );
•
Die eigentliche Anfrage wird ausgelöst, indem der Recordset abgefragt wird.
Recordset rs = ds.getRecordset();
•
Zur Anzeige wird die erzeugte DataSource dem DataGrid übergeben.
dataGrid1.setDataSource(ds);
Virtuelle Lehrerweiterbildung Informatik in Niedersachsen
Datenbanken mit J++
Eckart Modrow
S. 5
Das Ganze verpacken wir in einen try…catch-Block, um ggf. Fehler abzufangen. Den aktuellen Zustand zeigen wir in der Label-Komponente an.
private void button1_click(Object source, Event e)
{
String [] zeilen = memo.getLines();
String command = "";
for(int i=0;i<zeilen.length;i++)
command = command + zeilen[i] + " ";
try
{
label1.setText("Zustand: ... suchen");
DataSource ds = new DataSource();
ds.setConnectionString( "dsn=Schule;uid=emodrow;pwd=moni31");
ds.setCommandText( command );
Recordset rs = ds.getRecordset();
dataGrid1.setDataSource(ds);
label1.setText("Zustand: "+rs.getRecordCount()+" ausgewählt");
}
catch(Exception ex)
{
label1.setText("SQL-Fehler: " + ex.getMessage());
}
}
Damit lässt sich jetzt einiges anfangen!
Suchen wir doch mal alle Schülerinnen, deren Nachname mit „B“ anfängt:
Virtuelle Lehrerweiterbildung Informatik in Niedersachsen
Datenbanken mit J++
Eckart Modrow
Werden eigentlich die Mädchen schlecht benotet in Physik?
Wohl nicht.
Und wie sieht es in den anderen Fächern aus?
S. 6
Virtuelle Lehrerweiterbildung Informatik in Niedersachsen
Datenbanken mit J++
Eckart Modrow
Wie zensieren eigentlich die lieben Kolleginnen und Kollegen in den Leistungskursen?
Und insgesamt?
Wie gut, dass die Daten anonymisiert worden sind!
S. 7
Herunterladen