// Methode um Daten aus einem ResultSet in eine Wohnung umzuwandeln private Wohnung getWohnung(final ResultSet set) { Wohnung apt = new Wohnung(); try { // Attraktion at = new Attraktion(); // at.setBeschreibung(set.getString("beschreibung")); // at.setEntfernung(set.getInt("distanz")); // at.setName(set.getString("attraktionsname")); Land la = new Land(set.getInt("landesid"), set.getString("landesname")); Adresse adr = new Adresse( set.getInt("adressid"), set.getString("strasze"), set.getString("hausnummer"), "testort", // FIXME set.getString("ort"), set.getString("plz"), la); Ausstattung aus = new Ausstattung(set.getString("bezeichnung")); apt.setAnzahlZimmer(set.getInt("anzahlzimmer")); apt.setAusgestattet_mit(new LinkedList<>()); apt.setAttraktionen(new LinkedList<>()); // apt.getAttraktionen().add(at); apt.getAusgestattet_mit().add(aus); apt.setGroezse(set.getInt("groesze")); apt.setName(set.getString("name")); apt.setPreisProTag(set.getInt("preisprotag")); apt.setWohnungsnummer(set.getInt("wohnungsnummer")); apt.setAdresse(adr); } catch (SQLException e) { try { con.rollback(); } catch (SQLException se) { se.printStackTrace(); } System.err.println("Exception while reading from ResultSet in 'getWohnung'"); handleSQLException(e); throw new RuntimeException(e); } return apt; }
public List<Wohnung> searchApartments( final LocalDate anreise, final LocalDate abreise, final Land land, final int zimmer, final int preisMin, final int preisMax, final ObservableList<Ausstattung> ausstattungen) { List<Wohnung> list = new LinkedList<>(); try { Statement stm = createStatement(); StringBuilder sb = new StringBuilder(); /* sb.append( "SELECT * FROM dbsys20.Ferienwohnung f1 JOIN dbsys20.adresse a1 ON f1.adressid = a1.adressid " + "JOIN dbsys20.land l1 ON l1.landesid = a1.landesid JOIN dbsys20.ausgestattetmit am1 ON f1.wohnungsnummer = am1.wohnungsnummer " + "LEFT JOIN dbsys20.liegtinnaehe lin ON f1.wohnungsnummer = lin.wohnungsnummer JOIN dbsys20.attraktion at ON lin.attraktionsname = at.attraktionsname " + "LEFT JOIN dbsys20.Buchung b1 ON f1.wohnungsnummer = b1.wohnungsnummer"); sb.append(" WHERE l1.landesname = '").append(land.getLandesname()).append("'"); for (Ausstattung aus : ausstattungen) sb.append("AND am1.bezeichnung = '").append(aus.getBezeichung()).append("'"); sb.append("AND b1.abreisedatum > to_date('").append(abreise.toString()).append("')"); sb.append("AND b1.anreisedatum < to_date('").append(anreise.toString()).append("')"); */ sb.append( "SELECT * FROM dbsys20.Ferienwohnung f JOIN dbsys20.adresse a ON f.adressid = a.adressid JOIN dbsys20.land l ON l.landesid = a.landesid " + "JOIN dbsys20.ausgestattetmit am ON f.wohnungsnummer = am.wohnungsnummer LEFT JOIN dbsys20.buchung b ON f.wohnungsnummer = b.wohnungsnummer "); sb.append("WHERE l.landesname = '").append(land.getLandesname()).append("' "); for (Ausstattung aus : ausstattungen) sb.append("AND am.bezeichnung = '").append(aus.getBezeichung()).append("' "); sb.append( "AND f.wohnungsnummer Not IN ( SELECT f1.wohnungsnummer FROM dbsys20.Ferienwohnung f1 JOIN dbsys20.adresse a1 ON f1.adressid = a1.adressid " + "JOIN dbsys20.land l1 ON l1.landesid = a1.landesid JOIN dbsys20.ausgestattetmit am1 ON f1.wohnungsnummer = am1.wohnungsnummer " + "LEFT JOIN dbsys20.Buchung b1 ON f1.wohnungsnummer = b1.wohnungsnummer "); sb.append("WHERE l1.landesname = '").append(land.getLandesname()).append("' "); for (Ausstattung aus : ausstattungen) sb.append("AND am1.bezeichnung = '").append(aus.getBezeichung()).append("' "); sb.append("AND b1.abreisedatum > to_date('").append(anreise.format(DTF)).append("') "); sb.append("AND b1.anreisedatum < to_date('").append(abreise.format(DTF)).append("') "); sb.append(")"); String mySearchQuery = sb.toString(); System.out.println(mySearchQuery); ResultSet rset = stm.executeQuery(mySearchQuery); HashMap<Integer, List<Ausstattung>> ausMap = new HashMap<>(); // HashMap<Integer, List<Attraktion>> atMap = new HashMap<>(); while (rset.next()) { Wohnung tmp = getWohnung(rset); if (!ausMap.containsKey(tmp.getWohnungsnummer())) { list.add(tmp); ausMap.put(tmp.getWohnungsnummer(), tmp.getAusgestattet_mit()); // atMap.put(tmp.getWohnungsnummer(), tmp.getAttraktionen()); } else ausMap.get(tmp.getWohnungsnummer()).add(tmp.getAusgestattet_mit().get(0)); // atMap.get(tmp.getWohnungsnummer()).add(tmp.getAttraktionen().get(0)); } for (Wohnung w : list) // w.setAttraktionen(atMap.get(w.getWohnungsnummer())); w.setAusgestattet_mit(ausMap.get(w.getWohnungsnummer())); stm.close(); con.commit(); } catch (SQLException e) { try { con.rollback(); } catch (SQLException se) { se.printStackTrace(); } System.err.println("Exception while searching for apartements"); handleSQLException(e); throw new RuntimeException(e); } return list; }