Repository navigation
Backend Route speichern
← zurück zur Backend-Logik Übersicht
Autor: Michael
Definition: Diese Funktion pflegt eine Route in die Datenbank ein.
Modul: Rest
Dateiname: RoutesREST.java, H2RouteDAO
Pfad: /routes
Post-Anfragen mit dem Schlüssel "/routes" werden empfangen.
public RoutesREST(DAOFactory daoFactory) {
post("/routes", "application/json", (request, response) -> {
LOG.debug("HTTP-POST Anfrage eingetroffen: " + request.queryString());Im nächsten Schritt wird ein neues Routen-Objekt erstellt und mit dem Inhalt der Post-Anfrage befüllt. Zusätzlich wird aus diesem Inhalt ein Hash-Wert gebildet.
// Neue Route erstellen
Route route = new Route();
// Route mit Daten aus POST Anfrage befüllen
String temp = request.queryParams("route");
route.setData(temp);
// Hashwert bilden und der Route zuweisen
String hash = HashConverter.md5(temp);
route.setHash(hash);Es wird kenntlich gemacht, dass es sich bei dem Routen-Objekt um keine Top-Route handelt. Anschließend wird das Routen-Objekt mit der Methode, die im nächsten Abschnitt beschrieben wird, in der Datenbank eingepflegt.
// Route ist keine Top Route
route.setTop(false);
boolean successfull = daoFactory.getRouteDAO().insertRoute(route);Ist das Flag "successfull" aktiv, so wurde die Prozedur korrekt ausgeführt.
if(successfull){
// Wenn erfolgreich gespeichert
restResponse.setDescription("Route erfolgreich hinzugefügt");
restResponse.setSuccess();
}else{
// Wenn nicht erfolgreich gespeichert
restResponse.setDescription("Fehler beim Hinzufügen der Route");
restResponse.setError();
}
response.type("application/json");
return gson.toJson(restResponse);
});
}Die bereits im vorherigen Abschnitt behandelte Funktion:
boolean successfull = daoFactory.getRouteDAO().insertRoute(route);übernimmt im engeren Sinne das Einpflegen des Routen-Objekts in die Datenbank.
Der dafür notwendige Abfragebefehl lautet:
public boolean insertRoute(Route route) {
String sql = "INSERT INTO route (hash, data, top) VALUES (?,?,?)";Nachdem sichergestellt wurde, dass "Autocommits" deaktiviert sind, werden preparedStatements definiert, die mit dem Inhalt des Routen-Objekts gefüllt werden und letztendlich die Datenbankabfrage initiiert. Falls ein Fehler auftritt, wird eine entsprechende Meldung zurückgegeben.
try (Connection connection = cpds.getConnection()) {
// Immer ohne Autocommits arbeiten
connection.setAutoCommit(false);
// Immer mit PreparedStatements arbeiten
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, route.getHash());
preparedStatement.setString(2, route.getData());
preparedStatement.setBoolean(3, route.isTop());
// Füge das Statement der Ausführungsschlange hinzu
preparedStatement.addBatch();
// Führe alle Statements aus
preparedStatement.executeBatch();
}
// Schreibe die Änderungen in die Datenbank
connection.commit();
return true;
} catch (SQLException e) {
log.error(e.getMessage());
}
return false;
}