Donnerstag, 24. Mai 2012


Artikel

Juli 2010 | Artikel

Zugriff auf MySQL mit Java Fortsetzung, Teil 2

Teil 1   Teil 2   

Abbildung 6 zeigt einen kurzen Überblick über die verschiedenen Treiberarten (Quelle: Wikipedia.org):

Die grobe Vorgehensweise
  • Wir bauen unsere SQL-Abfrage. In diesem Beispiel soll es um einen Kunden gehen, zu dem wir seine Kundennummer, den Namen und Vornamen speichern.
  • Wir bauen die Klasse "Kunde", die einen Kunden darstellt (ein Kunde hat einen Namen, Vornamen und seine Kundennummer)
  • Wir kümmern uns um den SQL-Lowlevel-Input/Output (SQL-Verbindung aufbauen, Treiber einbinden, JDBC-URL angeben, …)
  • Wir holen unsere Daten mithilfe des SQL-Lowlevel-Inputs/Outputs ab und geben sie auf der Standardausgabe aus
  • Zum Schluss wollen wir, da unser Unternehmen stets Wachstum verspürt, ein neues Kundenobjekt in der Datenbank speichern
SQL-Abfrage bestimmen

Wir werden hier kein kompliziertes SQL-Statement erstellen, das über 200 verschiedene Tabellen reicht und 50 Where-Klauseln besitzt. Die Tabelle "kunden" enthält lediglich drei Datenfelder: Kundennummer, Vorname und Nachname (Abb. 7).

Damit wir alle Datensätze angezeigt bekommen, verwenden wir in der SQL-Abfrage den Stern-Operator (*). Danach muss mit dem Hilfswort FROM die Tabelle ausgewählt werden, von der die SQL-Daten abgefragt werden. Ein vollständiger SELECT-Befehl mit anschließender Datenausgabe könnte folgendermaßen aussehen:

Statt die Anfrage (den SQL-SELECT-Befehl) manuell einzugeben (wie oben), macht dies unser Java-Programm. Wir als Programmierer müssen aber in Java die Anweisung "hinterlegen".

Dateneinfügen mit Insert

Natürlich wollen wir auch neue Datensätze in unsere Datenbank laden. Die allgemeine Syntax des INSERT-Befehls sieht folgendermaßen aus:

  1. INSERT INTO tabellenname (feld1, feld2, …)
  2. VALUES (wert1, wert2, ….)

Das "INSERT INTO"-Kommando erwartet zunächst Informationen zur Tabelle. Zwingend erforderlich ist der Tabellenname. In Klammern folgen die Spalten, in die Werte eingefügt werden sollen. Dabei müssen alle Pflichtspalten (Datenspalten, die als NOT NULL deklariert wurden) angegeben werden, zusätzliche Spalten sind optional. Eine Datenspalte, deren Kennzeichnung "auto_increment" ist, müssen Sie NICHT angeben. Dies erledigt der Zähler für uns. Auto_increment wird idealerweise für Kundennummern oder ähnliche Datenfelder verwendet. Getrennt durch das Schlüsselwort VALUES wird ein Datensatz in Klammern eingefügt. Dabei wird wert1 in das feld1 eingefügt, wert2 in feld2 usw.

  1. mysql> INSERT INTO kunden(vorname,nachname)
  2. -> VALUE("Christian","Barthel");

Der Befehl (siehe oben) fügt einen neuen Kunden mit dem Namen "Christian" und dem Nachnamen "Barthel" ein. Die "kundennummer" wird automatisch um eins erhöht.

„Kunden“-Klasse erstellen

In objektorientierten Programmiersprachen ist es üblich, für die meisten Dinge eigene Java-Klassen zu erstellen. Aus diesen Klassen können später Objekte erstellt werden, die alle Fähigkeiten (Methoden) besitzen und Eigenschaften im Speicher ablegen. Wir wollen Kundendaten aus der Datenbank abfragen. Hierzu bietet sich für jeden Datensatz der Kundendatenbank ein Objekt an, das zwei Strings (Vorname und Nachname) sowie einen Integer-Wert (Ganzzahl, die Kundennummer) speichert. Eine einfach gehaltene Klasse könnte folgendermaßen aussehen:

  1. package javamysql;
  2. public class Kunde {
  3. //Attribute oder Instanzvariablen
  4. private int kundennummer;
  5. private String nachname;
  6. private String vorname;
  7. //Konstruktor
  8. public Kunde(int i, String n, String v){
  9. kundennummer = i;
  10. nachname = n;
  11. vorname = v;
  12. }
  13. //Beginn der Methoden
  14. public void setKundennummer( int i ){
  15. kundennummer = i;
  16. }
  17. public void setNachname( String n ){
  18. nachname = n;
  19. }
  20. public void setVorname( String v ){
  21. vorname = v;
  22. }
  23. public int getKundennummer(){
  24. return kundennummer;
  25. }
  26. public String getNachname(){
  27. return nachname;
  28. }
  29. public String getVorname(){
  30. return vorname;
  31. }
  32. @Override
  33. public String toString(){
  34. return kundennummer+" "+nachname+" "+vorname;
  35. }
  36. }

Die Klasse mit dem Namen "Kunde" enthält – wie zu erwarten – drei Instanzvariablen, deren Werte mit so genannten Getter- und Setter-Methoden geändert beziehungsweise ausgegeben werden können. Die überschriebene Methode toString() gibt uns einen Kunden als String zurück (mit Kundennummer, Nachname und Vorname).

Bevor wir uns nun um die Datenbank kümmern, sollten wir noch einen Startpunkt für unser Programm erstellen und die Klasse "Kunde" testen.

  1. package javamysql;
  2. public class Main {
  3. public static void main(String[] args) {
  4. //Neues Kundenobjekt erstellen
  5. //diese Daten kommen später von unserer Datenbank)
  6. Kunde k1 = new Kunde(1,"Christian","Barthel");
  7. //Kundenobjekt ausgeben
  8. System.out.println(k1.toString());
  9. }
  10. }

Da wir mit System.out.println eine Ausgabe auf der Konsole getätigt haben, sollte es folgendermaßen aussehen:

  1. run:
  2. 1 Christian Barthel
  3. BUILD SUCCESSFUL (total time: 0 seconds)
Soviel für heute. Im nächsten Artikelteil werden wir den JDBC-Treiber in Eclipse bzw. NetBeans einrichten und eine Verbindung mithilfe eines JDBC-URLs herstellen.
Christian Barthel macht eine Ausbildung zum Informatikkaufmann. Neben den Themen der Programmierung mit Java beschäftigt er sich ebenfalls mit Linux, Perl und infrastrukturellen Themen wie z. B. Backup, Dokumentmanagement mit Alfresco und Virtualisierung mit KVM, Xen und VMware. Durch seine Offenheit steht er sehr gerne mit anderen Menschen in Kontakt und tauscht Wissen über seine Interessensgebiete aus: christian.barthel@online.de

Teil 1   Teil 2   

Kommentare

Gravatar Gustav 06.07.2010
um 12:42 Uhr
Nichts für ungut, aber dieser Artikel ist technisch äußerst anspruchslos... #zitieren
Gravatar Christian 06.07.2010
um 13:08 Uhr

Gustav:
Nichts für ungut, aber dieser Artikel ist technisch äußerst anspruchslos...

In der Tat ist der Artikel recht grundlegend. Allerdings muss man fairerweise den Ausbildungsstatus des Autor betrachten ("Christian Barthel macht eine Ausbildung zum Informatikkaufmann.") und ihm zugute halten, dass er sich damit auseinander setzt und vor allem sein Wissen weitergeben möchte.
Nichtsdestotrotz lässt sich darüber streiten, ob der Artikel hier erscheinen muss oder nicht doch besser in einem Blog aufgehoben wäre.
Ansonsten möchte ich dem Autor dazu raten, nicht davor zurück zu schrecken, etwas zu weiteren Themen schreiben.
(Nur über das Verhältnis "Anspruch zu Veröffentlichungsort" sollte noch einmal nachgedacht werden.)
#zitieren
Gravatar christian barthel 06.07.2010
um 13:57 Uhr
Hi
@Gustav
Danke für die Kritik. Jedoch hab ich noch einen 2. und 3. Teil geschrieben, der sich dann tatsächlich intensiver mit der Programmierthematik beschäftigt (allerdings halt auch für Java-Datenbank-Anfänger). Die nächsten Teile sollten demnächst auch irgendwann hier erscheinen. Ich wollte den Einstieg einfach auch für Personen ermöglichen, die bisher noch keinen Bezug zu SQL hatten ...
#zitieren
Gravatar Aljoscha Rittner 06.07.2010
um 14:36 Uhr
Moin!

Wenn ich die Anfragelevel auf netbeans-.forum.de sehe, bin ich durchaus glücklich mal wieder einen aktuellen Artikel zu sehen, der bei den Grundlagen beginnt. Man muss dann nicht immer alles selber erklären ;-) - nur beim Code Review des Quelltextes hätte ich noch was anzumerken, ist aber bestimmt nur nitpicking. Trotzdem, auch hier passen bestimmt solche Artikel.

Beste Grüße!
#zitieren