Datenbankzugriff in Java – Übung
In diesem Beitrag zeigen wir dir anhand eines praktischen Beispiels wie man Datenbanken implementiert.
Inhaltsübersicht
Schritt für Schritt zur Implementierung einer Datenbank in Java
Wir gehen dafür Schritt für Schritt den Ablauf durch, wie man eine Verbindung zu einer Datenbank herstellt. Als erstes binden wir unseren Treiber in das Projekt ein. Das ist wichtig, denn sonst funktioniert nachher gar nichts.
Danach erstellen wir eine Klasse DBConnection und importieren alles, was wir brauchen werden.
Nun können wir anfangen, unsere Attribute zu deklarieren. Zuerst einmal brauchen wir einen unveränderlichen String, der die Adresse unserer Datenbank enthält. Unveränderlich ist er deshalb, weil er sonst bearbeitet werden kann. Das wollen wir in diesem Fall aber nicht, da wir uns nur mit einer Datenbank verbinden möchten.
Als nächstes brauchen wir noch einen user. Dieser ist standardmäßig auf root gesetzt. Sind in deiner Datenbank allerdings andere Benutzer vorhanden, sollten diese verwendet werden, denn der user legt die Zugriffsrechte innerhalb der Datenbank fest.
Um uns als Benutzer einzuloggen, brauchen wir allerdings noch ein Passwort. Das deklarieren wir als privaten String.
Wenn wir uns jetzt verbinden würden, würde der Zugriff allerdings nicht funktionieren. Das liegt daran, dass wir zusätzlich zur URL unserer Datenbank noch den Namen der Tabelle, auf die zugegriffen werden soll, benötigen. Grund dafür ist, dass in einer Datenbank mehrere Tabellen erstellt werden können und meist auch müssen, um komplexe Daten zu speichern.
Als letztes deklarieren wir einen String, der den Befehl speichert, der bei unserer Abfrage ausgeführt werden soll.
Da unsere Attribute private deklariert sind, müssen wir ihnen allerdings auch noch Getter- und Setter-Methoden verpassen, damit wir auf ihre Werte zugreifen und diese manipulieren können.
Einsetzen eines Konstruktors und Try-Catch-Block
Nun brauchen wir noch einen Konstruktor, der unsere Verbindung erst einmal erzeugt. Denn für jeden Zugriff erzeugen wir in Java eine eigene Verbindung und schließen sie nach Abschluss der gewünschten Aktion wieder. Dies hat Sicherheitsrisiken zur Grundlage, da eine ständig offene Verbindung viel anfälliger ist.
Als Parameter geben wir dem Konstruktor in diesem Beispiel einfach einen String mit, den der Benutzer in unserer Maske eingegeben hat. Mit diesem setzen wir unseren Befehl Command auf einen SQL-Befehl, der nach ähnlichen Namen wie diesem sucht.
Verbindungsherstellung in wenigen Schritten
Nun können wir mit dem eigentlichen Etablieren einer Verbindung beginnen.
Dazu legen wir einen Try-Catch-Block an damit wir alle entstehenden Fehler abgreifen können, die unsere Verbindung behindern.
In den Try-Bereich schreiben wir unseren Verbindungsaufbau, in den Catch-Block, das Exception-Handling.
Beginnen wir also mit Schritt eins, dem Laden des Treibers. Dazu erzeugen wir eine neue Instanz des Klassen-Objekts, das als Namen unseren Treiber enthält.
Nachdem das getan ist, können wir Java erklären, wie es eine Verbindung aufbauen soll. Das machen wir mittels eines Verbindungs-Objektes namens con. Dazu rufen wir die Funktion der Klasse DriverManager auf, die sich unserer Attribute bedient und damit versucht, eine Verbindung herzustellen.
Nun wollen wir aber auch noch auf die richtige Tabelle zugreifen. Deshalb erzeugen wir ein Statement-Objekt. Um die Tabelle aufzurufen, müssen wir jetzt nur noch dessen execute-Methode aufrufen und als Parameter angeben, welche Tabelle wir nutzen wollen.
So! Damit sind wir endlich bereit, unsere Daten abzufragen.
Dazu nutzen wir erneut unser stt und rufen seine executeQuery-Funktion auf. Diesmal geben wir als Parameter unseren Befehl ein.
Jetzt müssen wir aber unser Ergebnis auch irgendwo speichern. Das erreichen wir mit einem sogenannten ResultSet Objekt.
Prima! Du hast jetzt erfolgreich Daten aus deiner Datenbank abgerufen.
Alles, was jetzt noch zu tun bleibt, ist sie auszugeben und alles wieder zu schließen.
Durchlaufen einer Schleife zum Schluss
Um unser Resultat anzuzeigen, brauchen wir eine Schleife, die durch all unsere Treffer läuft. Sollte die Abfrage mehrere Treffer liefern, würden wir ohne sie nämlich nur einen dieser Treffer angezeigt bekommen.
Diese Schleife lassen wir die gewünschten Spalten unseres Ergebnisses in einen String speichern. Praktischerweise gibt es dafür die getString Funktion unseres ResultSet-Objekts.
Nun müssen wir nur noch den String, den wir erhalten, ausgeben.
Das geht am einfachsten mit einer System.out.println Funktion. In unserem Fall erhält der Nutzer allerdings die Daten zurück in sein GUI.
Um das ganze abzurunden, müssen wir noch die bereits angesprochenen Sicherheitsrisiken eliminieren. Dazu rufen wir einfach von all unseren Verbindungs-Objekten, also von res, stt und con, die bereitgestellte close-Funktion auf.
Geschafft! Jetzt haben wir erfolgreich eine Verbindung zu einer Datenbank in Java hergestellt. Probiere es doch selbst einmal aus!