Skip to content
This repository was archived by the owner on Sep 18, 2020. It is now read-only.

Backend Route speichern

Michael H. edited this page Jan 23, 2015 · 12 revisions

← zurück zur Backend-Logik Übersicht

Autor: Michael

Kurzprofil der Funktion

Definition: Diese Funktion pflegt eine Route in die Datenbank ein.
Modul: Rest
Dateiname: RoutesREST.java, H2RouteDAO
Pfad: /routes

Erstellen der Funktion

Erstellen der Schnittstelle (RoutesREST)

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);
		});
	}

Erstellen der SQL-Prozedur (insertRoute)

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;
	}

Clone this wiki locally