Javafx: очистка ResultSet для запроса SQLite, чтобы он не сохранял предыдущие результаты - PullRequest
0 голосов
/ 16 мая 2018

Я принимаю выбранное значение в выпадающем списке 1 и использую запрос SQLite на основе этого выбора, чтобы заполнить выпадающий список 2 с помощью набора результатов.Запрос в порядке, но, поскольку он является тем же набором результатов, он сохраняет предыдущие записи в наборе результатов.

Есть ли способ очищать набор результатов каждый раз, чтобы не извлекать данные, которые мне не нужны?

Controller Class

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class UpdateInventoryController implements Initializable {
    @FXML ComboBox brandOne;
    @FXML ComboBox flavourOne;

    String brandsInInventory;
    String flavoursInInventory;
    String selectedBrand = "";

    private static Connection con;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        populateBrandCombos();

        brandOne.getSelectionModel().selectedItemProperty().addListener( (options, oldValue, newValue) -> {
                    selectedBrand = String.valueOf(newValue);
                    if (selectedBrand != "") {
                        populateFlavourCombos();
                    }
                }
        );
    }

    public void populateBrandCombos() {
        try {
            con = DriverManager.getConnection("jdbc:sqlite:C:\\Users\\PengStation420\\IdeaProjects\\PengVapour\\PVIM.sqlite");

            ResultSet rs = con.createStatement().executeQuery("SELECT " +
                    "DISTINCT Brand " +
                    "FROM Concentrates");

            while (rs.next()) {
                brandsInInventory = rs.getString("Brand");
                brandOne.getItems().addAll(brandsInInventory);
                brandTwo.getItems().addAll(brandsInInventory);
                brandThree.getItems().addAll(brandsInInventory);
                brandFour.getItems().addAll(brandsInInventory);
                brandFive.getItems().addAll(brandsInInventory);
                brandSix.getItems().addAll(brandsInInventory);
            }
        } catch (SQLException ex) {
            Logger.getLogger(InventoryController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @FXML
    public void populateFlavourCombos() {
        selectedBrand = brandOne.valueProperty().getValue().toString();

        try {
            con = DriverManager.getConnection("jdbc:sqlite:C:\\Users\\PengStation420\\IdeaProjects\\PengVapour\\PVIM.sqlite");

            ResultSet rs = stmt.executeQuery("SELECT " +
                    "DISTINCT Flavour " +
                    "FROM Concentrates " +
                    "WHERE Concentrates.Brand " +
                    "LIKE '%" + selectedBrand + "%'");

            int rows = 0;
            while (rs.next()) {
                flavoursInInventory = rs.getString("Flavour");
                flavourOne.getItems().addAll(flavoursInInventory);
                rows++;
            }
            flavourOne.setVisibleRowCount(rows); // set new visibleRowCount value
        } catch (SQLException ex) {
            Logger.getLogger(InventoryController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Пример результата:

Действие 1: выбор 1 в ComboBox 1 позволяет получить 2 результата.ComboBox 2 отображает 2 результата.

Действие 2: выбор 2 в ComboBox 2 показывает 3 результата.ComboBox отображает результаты действия 1 и действия 2.

Желаемый результат:

Действие 1: выбор 1 в ComboBox 1 позволяет получить 2 результата.ComboBox 2 отображает 2 результата.

Действие 2: выбор 2 в ComboBox 2 показывает 3 результата.ComboBox отображает 3 результата.

1 Ответ

0 голосов
/ 16 мая 2018

Результаты, которые вы видите, происходят потому, что вы никогда не удаляете какие-либо элементы из ComboBox.

. Для достижения этой функциональности вы должны очищать ComboBox каждый раз.

Что-то похожее на

flavourOne.getItems().clear();

Это удалит все предыдущие записи и сохранит ваши основные функции с flavourOne.getItems().add...

...