Как загрузить «набор результатов» один за другим в табличное представление? - PullRequest
0 голосов
/ 17 марта 2019

Я загрузил миллионы строк данных из 5 таблиц в базу данных. Я хочу отобразить загруженные данные в виде таблицы. Загрузка всех записей занимает много времени (иногда все они не помещаются в память). Я хочу сделать так, чтобы я мог загрузить результирующий набор, отобразить его, загрузить второй и так далее. Это возможно? Мой код на данный момент:

@FXML
    private TableView<Vysledok_hladania> table;

@FXML
private TableColumn<Vysledok_hladania, String> Nazov_hotela, Adresa, Krajina, Mesto, Hviezdicky, Cena, Typ_izby, Pocet_izieb;

@FXML
    void vyhladajInfo(ActionEvent event){
        table.getItems().clear();
        try {
            Connection con = Runner.getConnection();
            con.setAutoCommit(false);
            String query = "SELECT h.\"Nazov hotela\", k.\"Nazov krajiny\", m.\"Nazov mesta\", h.\"Adresa hotela\", h.\"Hviezdicky\", p.\"Cena pobytu\", i.\"Typ izby\", h.\"Pocet izieb\" FROM hotel h " +
                    "inner  JOIN izba i ON i.\"ID hotela\" = h.\"ID hotela\" " +
                    "inner JOIN krajina k ON k.\"ID krajiny\" = h.\"ID krajiny\" " +
                    "inner JOIN mesto m ON m.\"ID mesta\" = h.\"ID mesta\" " +
                    "inner JOIN pobyt p ON p.\"ID hotela\" = h.\"ID hotela\" " +
                    "WHERE h.\"Nazov hotela\" = ? " +
                    "AND k.\"Nazov krajiny\" = ? " +
                    "AND h.\"Hviezdicky\" = ? " +
                    "AND i.\"Pocet posteli\" >= ? " +
                    "AND p.\"Cena pobytu\" <= ? ";
                    //"AND p.\"Datum od\" = ? " +
                    //"AND p.\"Datum do\" <= ?";

            int i = 1;

            PreparedStatement pst = con.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            pst.setFetchSize(50);
            pst.setString(1,Text_nazov.getText());
            pst.setString(2,(String)krajina.getValue());
            int pocet_hviezdiciek = Integer.parseInt((String)hviezdicky.getValue());
            pst.setInt(3,pocet_hviezdiciek);
            int pocet_osob = Integer.parseInt((String)osoby.getValue());
            pst.setInt(4, pocet_osob);
            double cena_pobytu = Double.parseDouble(Text_cena.getText());
            pst.setDouble(5, cena_pobytu);
//            Date datum_OD = Date.valueOf(date_od.getValue());
//            pst.setDate(6, datum_OD);
//            Date datum_DO = Date.valueOf(date_do.getValue());
//            pst.setDate(7, datum_DO);
            ResultSet rs = pst.executeQuery();
            System.out.println(pst);

            Nazov_hotela.setCellValueFactory(new PropertyValueFactory<>("Meno_hotela"));
            Krajina.setCellValueFactory(new PropertyValueFactory<>("Krajina"));
            Mesto.setCellValueFactory(new PropertyValueFactory<>("Mesto"));
            Adresa.setCellValueFactory(new PropertyValueFactory<>("Adresa"));
            Hviezdicky.setCellValueFactory(new PropertyValueFactory<>("Hviezdicky"));
            Cena.setCellValueFactory(new PropertyValueFactory<>("Cena"));
            Typ_izby.setCellValueFactory(new PropertyValueFactory<>("Typ_izby"));
            Pocet_izieb.setCellValueFactory(new PropertyValueFactory<>("Pocet_izieb"));


            while(rs.next()){
                oblist.add(new Vysledok_hladania(rs.getString("Nazov hotela"),
                        rs.getString("Nazov krajiny"),
                        rs.getString("Nazov mesta"),
                        rs.getString("Adresa hotela"),
                        rs.getInt("Hviezdicky"),
                        rs.getDouble("Cena pobytu"),
                        rs.getString("Typ izby"),
                        rs.getInt("Pocet izieb")));
                System.out.println(i++);
            }

            rs.close();
            pst.close();
            con.close();

        } catch(SQLException ex){
            Logger.getLogger(Result_Controller.class.getName()).log(Level.SEVERE, null, ex);
        }

        table.setItems(oblist);
    }
...