예제 #1
0
  // 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;
  }
예제 #2
0
  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;
  }