Einfache Datenabfrage
Da wir nun unsere Verbindung aufgebaut haben, können wir uns nun erste Datensätze aus der MySQL-Tabelle holen. Die gesamte Methode befindet sich hier unterhalb, die Erklärung folgt nach dem Listing.
public Vector loadCustomers(String table){ Statement stmt = null;ResultSet result = null;try {stmt = connection.createStatement();result = stmt.executeQuery("SELECT * FROM " + table);result.first(); // <- first entry of the result set// STEP 2: copy the data from the result set into the vectorVector customers = new Vector();while(! result.isAfterLast()) // as long as valid data is in the result set{int id = result.getInt("kid");String name = result.getString("name");String vorname = result.getString("vname");Kunde kunde = new Kunde(id, name, vorname);customers.add(kunde);result.next(); // go to next line in the customer table}// STEP 3: return the vector containing the customer datareturn customers;} catch (Exception ex) {System.out.println("Error during access + " + table + "\n" + ex.getMessage());return null;}}
Das Prinzip dieser Abfragemethode kann in sechs einfachen Schritten erklärt werden:
- Die Methode loadCustomers wird mit dem Parameter "Tabellenname" (Tabelle, die unsere Kunden enthält) aufgerufen.
- Wir bauen die Verbindung auf und stellen unser SQL-Statement (ganz am Anfang wurde kurz darüber gesprochen, wie dieses aussehen muss, damit wir einfache Abfragen erstellen können)
- Diese Abfrage wird ausgeführt und die Datensätze werden in einem "Resultset" gespeichert.
- Um nun einen Zugriff auf die tatsächlichen Datensätze aus dem Resultset zu bekommen, müssen wir in eine WHILE-Schleife den kompletten Datenbestand aus dem Resultset-Objekt "herausziehen"; in diesem Fall speichern wir diese "herausgezogenden" Datensätze“ in einem Vektor ab
- Ein Vector dient dazu – wie Arrays oder ArrayLists – Daten abzuspeichern
- Den gesamten Vektor mit den Datensätzen geben wir als Rückgabewert der Methode zurück.
Gehen wir noch kurz den Code im Detail durch. Bevor wir den TRY/CATCH-Block initialisieren, legen wir zunächst unsere benötigten Variablen ab. Wir benötigen ein Statement (Variablenname stmt), auf dessen wir unsern SQL-Query ausführen können. Zusätzlich wollen wir die vom Datenbankserver gelieferten Daten auch abspeichern, dies geschieht innerhalb des ResultSet-Objekts.
Statement stmt = null;ResultSet result = null;
Im nächsten Schritt benötigen wir einen TRY/CATCH-Block, um eventuell auftretende Ausnahmen abfangen zu können (falscher SQL-Query, Verbindungsabbruch, nicht vorhandene Datenfelder, …). Von der Instanzvariablen "connection" lassen wir uns zunächst ein Statement geben. Die "connection"-Variable besitzt die Verbindungsdaten und baut mit diesen eine Verbindung auf.
try {stmt = connection.createStatement();
Als Rückgabewert erhalten wir ein Statement-Objekt, auf dem wir unseren SQL-Query ausführen können. Der Methode executeQuery wid ein SQL-String übergeben, mit der wir entweder Daten abfragen, einfügen oder modifizieren können. In diesem Fall übergeben wir die statischen Schlüsselwörter "SELECT * FROM", gefolgt von der Variable "table", die den Tabellennamen der zu abfragenden Tabelle enthält. Eine deutsche Übersetzung dieses Befehls könnte in etwa so lauten: Gib mir alle Spalten aus der Tabelle "table" ohne Einschränkung (keine WHERE-Dinge…). Der Tabellenname wird beim Methodenaufruf als Parameter initialisiert.
stmt = connection.createStatement();result = stmt.executeQuery("SELECT * FROM " + table);
Das Rückgabeobjekt von "executeQuery" ist ein ResultSet und beinhaltet alle zurückgelieferten Datensätze der Abfrage. Um es später benutzen zu können, speichern wir dieses ResultSet in der Variable "result" ab.
Nun können wir mit dem Erstellen der Kundenobjekte beginnen. Zunächst wird der aktuelle Zeiger auf den ersten Datensatz gesetzt.
result.first(); // <- first entry of the result setVector customers = new Vector();
Danach können wir mit einer While-Schleife das ResultSet durchlaufen. Die Schleifenbedingung "isAfterLast" läuft solange, bis der letzte Datensatz ausgeführt wurde.




