Repository navigation
Backend Gespeicherte Routen auslesen
Autor: Tabea
Bei dem Anwendungsfall "gespeicherte Routen auslesen" soll mit Hilfe eines Hashwertes eine Route ausgelesen werden. Diese Schnittstelle zwischen Frontend und Backend wird hier beschrieben.
Wie bei der Abfrage der Top Routen wird auch hier die dafür erstellte Datenklasse Route.javaaus dem Package de.dhbw.hh.models benötigt. Mit dem Unterschied, dass der Boolean top hier false ist.
Bei dem Interface handelt es sich um das Interface RouteDAO.javain dem Package de.dhbw.hh.dao. das bereits für die Top Routes erstellt wurde. Für die Abfrage der gespeichtern Routen mit Hilfe des Hashwertes wird folgende Methode benötigt:
/**
* Diese Funktion findet eine bestimmte Route anhand ihres Hashwerts
*
* @param hash Wert nach dem die Route gesucht wird
* @return gesamte Route-Onjekt bei Erfolg. Wenn nichts gefunden wird null
*/
public Route findRoute(String hash);Für die Abfrage der Route wird die Funktion public Route findRoute(String hash) aus dem Interface in die bereits vorhandene Klasse H2RouteDAO.javahinzugefügt.
Zu Beginn wird eine SQL-Abfrage erstellt, die die Route mit dem entsprechenden Hash-Wert ausgibt:
String sql = "SELECT data, top, hash FROM route WHERE hash=?"
Anschließend wird über eine try-catch-Anweisung versucht, eine Connection zur Datenbank aus dem Connectionpool zu holen. Dabei wird das automatische Commiten verboten. War die Connection erfolgreich wird über eine weitere try-catch-Anweisung ein Prepared-Statement zur Datenbankabfrage erstellt und der Hash-Wert in die SQl-Abfrage eingefügt. Die SQL-Abfrage wird ausgeführt und für die Ergebnisse ein Objekt Routeerzeugt, in das sie dann eingetragen werden. Anschließend wird, falls vorhanden, routezurückgegeben, andernfalls null.
// Erstellt das Prepared Statement für die Datenbankabfrage
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
// Fügt den Hash-Wert in die SQL-Abfrage ein
preparedStatement.setString(1, hash);
// Daten aus der Datenbank holen
ResultSet resultSet = preparedStatement.executeQuery();
// Falls ein Wert vorhanden ist, werden diese in route geschrieben und zurückgegeben
if(resultSet.next()){
Route route = new Route();
route.setHash(resultSet.getString("hash"));
route.setData(resultSet.getString("data"));
route.setTop(resultSet.getBoolean("top"));
return route;
}
// Wenn kein Wert vorhanden ist wird null zurückgegegben
return null;Über die Klasse RoutesRest.javaaus dem Package de.dhbe.hh.rest werden die Methoden für die REST-Schnittstelle zur Verfügung gestellt. Mit Hilfe der Spark-Funktion get für den Pfad /routes/:hash wird über die DAOFactory die Funktion findRoute(request.queryString())ausgeführt und dabei der String der Anfrage für die Datenbankabfrage übergeben. In dem Rückgabeobjekt RESTResponse wird der angefragte String als Name sowie der aktuelle Zeitpunkt gesetzt. Über eine if-Abfrage wird getestet, ob eine Route gefunden werden konnte.
//Überprüfen, ob die Route abgerufen werden kann
if(HashRoute.isHashEmpty()) {
//Es wurde keine Route gefunden
r.setDescription("Keine Route gefunden");
r.setError();
r.setData(null);
} else {
//Route wurde gefunden
r.setDescription("Folgende Route wurde gefunden");
r.setSuccess();
//Collection erstellen und HashRoute hinzufügen um Methode setData() verwenden zu können
Collection<Object> data = new ArrayList<Object>();
data.add(HashRoute);
r.setData(data);
}Da für die Methode setData(data)eine Collection benötigt wird, muss HashRoutezunächst umgewandelt werden.
Zum Schluss muss das REST Objekt als Json String umgewandelt und zurück gegeben werden.