Нахождение SQL данных с фильтрами - PullRequest
0 голосов
/ 13 января 2020

Таким образом, я разрабатываю систему управления полетами в качестве школьного проекта, и у меня возникло задание.

Я должен предоставить возможность своему клиенту искать рейсы Multistop, которые состоят из прямых рейсов. .

Небольшой пример: клиент хочет перелет из Германии в США, и у меня есть два следующих рейса:

  1. Германия -> Турция
  2. Турция -> США

Если клиент ищет многоцелевой рейс, система должна объединить два рейса в один.

Пока я могу найти два рейса и сохранить название Multistop рейс в переменную, но у меня проблема с оператором SQL для поиска рейсов.

Мой код пока:

Небольшое объяснение: startAirportcombo - это инструмент выбора начальной точки для первого полета. zielTargetAirportcombo является целью.

Метод для поиска второго рейса:

möglicheFlüge =FXCollections.observableArrayList();
ResultSet myRs = pStatement.executeQuery(" select * from flügehin ");

while(myRs.next()) {
    if (myRs.getString("startHinlughafen").equals(startAirportCombo.getValue())
            && myRs.getString("zielHinflughafen").equals(zielAirportCombo.getValue()) == false) {
        tempMultiStopp = myRs.getString("zielHinflughafen");


        if (myRs.getString("startHinlughafen").equals(tempMultiStopp) &&
                myRs.getString("zielHinflughafen").equals(zielAirportCombo.getValue())) {
            multiStop = tempMultiStopp;
        }
    }
}

Способ поиска комбинированных рейсов и отображения для клиента:

if(seatsComboBusiness.getSelectionModel().isEmpty() ||seatsComboEco.getSelectionModel().isEmpty()) {
    Alert alert = new Alert(Alert.AlertType.WARNING, "Bitte wählen Sie mindestens einen Sitzplatz aus!");
    alert.setTitle("Fehler");
    alert.showAndWait();
} else {

    if (seatsComboBusiness.getValue() == 0 && seatsComboEco.getValue() == 0) {
        Alert alert = new Alert(Alert.AlertType.WARNING, "Bitte wählen Sie mindestens einen Sitzplatz aus!");
        alert.setTitle("Fehler");
        alert.showAndWait();
    } else {

        try {

            // Ablesen
            Statement pStatement = connection.createStatement();
            möglicheFlüge = FXCollections.observableArrayList();
            ResultSet myRs = pStatement.executeQuery("select * from flügehin where startHinlughafen = \""
                    + startAirportCombo.getValue() + "\" AND anzahlsitzplätzeeco >= \""
                    + seatsComboEco.getValue() + "\" AND anzahlsitzplätzebus >= \""
                    + seatsComboBusiness.getValue() + "\" AND zielHinFlughafen = \""
                    + zielAirportCombo.getValue() + "\" AND ( hinflugdatum = \"" + date.getValue()
                    + "\" OR hinflugdatum = \"" + date.getValue().plusDays(-1) + "\" OR hinflugdatum =\""
                    + date.getValue().plusDays(-2) + "\" OR hinflugdatum =\"" + date.getValue().plusDays(-3)
                    + "\" OR hinflugdatum =\"" + date.getValue().plusDays(1) + "\" OR hinflugdatum =\""
                    + date.getValue().plusDays(2) + "\" OR hinflugdatum =\"" + date.getValue().plusDays(3)
                    + "\" ) "
            );

            while (myRs.next()) {


                möglicheFlüge.add(
                        new InstancedFlightModel(myRs.getInt("flightHinId"), myRs.getString("startHinlugHafen"),
                                myRs.getString("zielHinFlughafen"), myRs.getString("hinflugdatum"),
                                myRs.getString("flugzeug"), myRs.getInt("anzahlsitzplätzeeco"),
                                myRs.getInt("anzahlsitzplätzebus"), myRs.getString("uhrzeitHinflug"),
                                myRs.getFloat("preisEconomy"), myRs.getFloat("preisBusiness"),
                                myRs.getFloat("distanz"), myRs.getString("FGM"), secondDirectFlight()));
            }

        } catch (Exception e) {
            Alert alert = new Alert(Alert.AlertType.ERROR,
                    "Bitte überprüfen Sie Ihre Angaben auf Vollständigkeit");
            alert.setTitle("Kein Flug gefunden");
            alert.showAndWait();
            e.printStackTrace();

        }

        startAirport.setCellValueFactory(new PropertyValueFactory<>("startToAirport"));
        multistoppColumn.setCellValueFactory(new PropertyValueFactory<>("multistopp"));
        targetAirport.setCellValueFactory(new PropertyValueFactory<>("targetToAirport"));
        flightDate.setCellValueFactory(new PropertyValueFactory<>("flightDate"));
        flightTime.setCellValueFactory(new PropertyValueFactory<>("flightTime"));
        airplane.setCellValueFactory(new PropertyValueFactory<>("airPlane"));
        priceEco.setCellValueFactory(new PropertyValueFactory<>("priceEconomy"));
        priceBus.setCellValueFactory(new PropertyValueFactory<>("priceBusiness"));
        idColumn.setCellValueFactory(new PropertyValueFactory<>("flightNumber"));
        airline.setCellValueFactory(new PropertyValueFactory<>("fluggesellschaft"));
        distanz.setCellValueFactory(new PropertyValueFactory<>("distance"));

        table.setItems(möglicheFlüge);
        if (möglicheFlüge.isEmpty()) {
            Alert alert = new Alert(Alert.AlertType.WARNING,
                    "Es konnte auf Basis Ihrer Eingaben kein passender Flug gefunden werden.");
            alert.setTitle("Kein Flug gefunden");
            alert.showAndWait();
        }
    }
}

Я думаю, что проблемы l ie в операторе SQL в последнем методе, но переменная "multistop" остается нулевой в конце. Так может кто-нибудь может мне помочь или дать указатель?

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Вы можете сделать это SQL тоже. Я предполагаю, что имя таблицы - "рейс", см. SQL ниже. Передайте условие поиска места отправления и назначения этому SQL. Он найдет рейсы с 0 или 1 сообщением.

SELECT *
FROM (
select origin, destination
from flight
where origin = ?
) a INNER JOIN
(
select origin, destination
from flight
where destination = ?
) b
ON a.destination = b.origin       
;
0 голосов
/ 13 января 2020

Так что я мог бы решить проблему, когда полеты не были бесполезными. Но теперь проблема в том, что мульти Стоп всегда меняется. Пример У меня есть следующие три рейса.

  1. Германия - США
  2. Германия - Турция
  3. Турция - США
  4. Германия - Китай

Теперь, если покупатель ищет Германию - США, мультистоп становится Китаем, хотя рейсов из Китая в США нет. Это обновленная версия метода поиска других рейсов. Мне пришлось переименовать набор результатов, чтобы исправить мою первую проблему.

        Statement pStatement = connection.createStatement();
        ResultSet myRs2 = pStatement.executeQuery("select * from flügehin "
            );


        while (myRs2.next()) {

            if (myRs2.getString("startHinlughafen").equals(startAirportCombo.getValue())
                    && myRs2.getString("zielHinflughafen").equals(zielAirportCombo.getValue()) == false) {
                tempMultiStopp = myRs2.getString("zielHinflughafen");
            }
                else {
                    tempMultiStopp = null;
                }

                if (myRs2.getString("startHinlughafen").equals(tempMultiStopp)
                        && myRs2.getString("zielHinflughafen").equals(zielAirportCombo.getValue())) {
                    multiStop = tempMultiStopp;
                }

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...