/**
   * fügt einen neuen Kontakt zur Kontaktliste hinzu
   *
   * @param besitzer Der Besitzer der Kontaktliste
   * @param kontakt Der Kontakt, der hinzugefügt werden soll
   */
  public void kontaktZurKontaktListeHinzufuegen(String besitzer, String kontakt) {
    int kNr = bestimmeBNrBenutzer(kontakt);
    int bNr = bestimmeBNrBenutzer(besitzer);

    try {
      // überprüft, ob der Konktakt noch nicht in der Kontaktliste ist
      boolean gefunden = false;
      ResultSet rueckgabewert = null;
      String query1 = "select count(*) from kontaktliste where besitzer = ? and kontakt = ?";
      PreparedStatement anweisung1 = con.prepareStatement(query1);

      anweisung1.setString(1, besitzer);
      anweisung1.setString(1, kontakt);
      rueckgabewert = anweisung1.executeQuery();

      // werdet den Rückgabewert aus
      while (rueckgabewert.next()) {
        gefunden = rueckgabewert.getBoolean(1);
      }

      if (!gefunden) {
        // fügt den Kontakt zur Kontakliste hinzu
        String query = "insert into kontaktliste (besitzer, kontakt) values(?, ?);";
        PreparedStatement anweisung = con.prepareStatement(query);

        anweisung.setInt(1, bNr);
        anweisung.setInt(2, kNr);
        anweisung.executeUpdate();
      }
    } catch (SQLException e) {
      System.err.println(e.getClass().getName() + ": " + e.getMessage());
      System.exit(1);
    }
  }
  /** erstellt die nötigen Tabellen in der Datenbank, falls sie noch nicht exisiteren */
  private void erstelleTabellen() {
    try {
      // erstellt die Benutzer-Tabelle
      String dbQuery =
          "CREATE TABLE IF NOT EXISTS benutzer ("
              + "bNr INTEGER PRIMARY KEY AUTOINCREMENT,"
              + "benutzername VARCHAR(45) NOT NULL,"
              + "statusnachricht text,"
              + "statussymbol VARCHAR(4),"
              + "status_aktuell_seit INTEGER,"
              + "passwort VARCHAR(50) NOT NULL,"
              + "online TINYINT(1));";

      con.createStatement().executeUpdate(dbQuery);

      // erstellt die Kontaklisten-Tabelle
      dbQuery =
          "CREATE TABLE IF NOT EXISTS kontaktliste ("
              + "kId INTEGER PRIMARY KEY AUTOINCREMENT,"
              + "besitzer INTEGER,"
              + "kontakt INTEGER,"
              + "foreign key (besitzer) references benutzer(bNr),"
              + "foreign key (kontakt) references benutzer(bNr))";

      con.createStatement().executeUpdate(dbQuery);

    } catch (SQLException e) {
      System.err.println(e.getClass().getName() + ": " + e.getMessage());
      System.exit(1);
    }
  }
  /**
   * Änder die Statusnachricht des Benutzers
   *
   * @param benutzer Der Benutzer
   * @param nachricht Die neue Statusnachricht
   */
  public void aendereStatusnachricht(String benutzer, String nachricht) {

    try {
      String query =
          "update benutzer set status_aktuell_seit = ?, statusnachricht = ? where benutzername = ?";
      PreparedStatement anweisung = con.prepareStatement(query);

      anweisung.setLong(1, System.currentTimeMillis());
      anweisung.setString(2, nachricht);
      anweisung.setString(3, benutzer);
      anweisung.executeUpdate();
    } catch (SQLException e) {
      System.err.println(e.getClass().getName() + ": " + e.getMessage());
      System.exit(1);
    }
  }
 /**
  * legt einen neuen Benutzer in der Datenbank an
  *
  * @param benutzername Benutzername des neuen Benutzers
  * @param passwort Passwort des neuen Benutzers
  */
 public void benutzerAnlegen(String benutzername, String passwort) {
   try {
     String query =
         "insert into benutzer (benutzername, statussymbol, status_aktuell_seit, passwort, online)"
             + "values(?, ?, ?, ?, ?);";
     PreparedStatement anweisung = con.prepareStatement(query);
     anweisung.setString(1, benutzername);
     anweisung.setString(2, "chat");
     anweisung.setLong(3, System.currentTimeMillis());
     anweisung.setString(4, passwort);
     anweisung.setBoolean(5, true);
     anweisung.executeUpdate();
   } catch (SQLException e) {
     System.err.println(e.getClass().getName() + ": " + e.getMessage());
     System.exit(1);
   }
 }
  /**
   * Änder den Online-Status eines Benutzers
   *
   * @param benutzer Der Benutzer
   * @param online Sein nuer Online-Status
   */
  public void aendereOnlineStatus(String benutzer, boolean online) {

    try {
      String query =
          "update benutzer set online = ?, status_aktuell_seit = ?, statussymbol = ? where benutzername = ?";
      PreparedStatement anweisung = con.prepareStatement(query);

      anweisung.setBoolean(1, online);
      anweisung.setLong(2, System.currentTimeMillis());
      anweisung.setString(3, "chat");
      anweisung.setString(4, benutzer);

      anweisung.executeUpdate();
    } catch (SQLException e) {
      System.err.println(e.getClass().getName() + ": " + e.getMessage());
      System.exit(1);
    }
  }
  /**
   * Fragt vom Server die Kontaktliste des übergebenen Benutzers ab
   *
   * @param benutzer Der Benutzer von den die Kontaktliste geladen werden soll
   * @return Die Kontaktliste
   */
  public ResultSet get_kontaktliste(String benutzer) {

    ResultSet rueckgabewert = null;
    try {
      String query =
          "select  k.benutzername, k.online, k.statusnachricht, k.statussymbol "
              + "from "
              + "kontaktliste, benutzer AS k, benutzer AS b "
              + "where b.benutzername = ? and b.bNr = kontaktliste.besitzer and k.bNr = kontaktliste.kontakt;";

      PreparedStatement anweisung = con.prepareStatement(query);
      anweisung.setString(1, benutzer);
      rueckgabewert = anweisung.executeQuery();

    } catch (SQLException e) {
      System.err.println(e.getClass().getName() + ": " + e.getMessage());
      System.exit(1);
    }
    return rueckgabewert;
  }
  /**
   * bestimmt dies Id eines Benutzers
   *
   * @param benutzername Der zu überprüfene Benutzername
   * @return Die ID des Benutzer, wenn nichts gefunden -1
   */
  public int bestimmeBNrBenutzer(String benutzername) {
    int id = -1;
    ResultSet rueckgabewert = null;
    try {
      // sendet eine Datenbnankabfrage zur Ermittelung, ob es den Benutzer schon gibt
      String query = "select bNr from benutzer where benutzername = ?";
      PreparedStatement anweisung = con.prepareStatement(query);
      anweisung.setString(1, benutzername);
      rueckgabewert = anweisung.executeQuery();

      // werdet den Rückgabewert aus
      while (rueckgabewert.next()) {
        id = rueckgabewert.getInt(1);
      }

    } catch (SQLException e) {
      System.err.println(e.getClass().getName() + ": " + e.getMessage());
      System.exit(1);
    }
    return id;
  }
  /**
   * Lädt die Statusnachricht des Benutzers
   *
   * @param benutzer Der Benutzer
   * @param nachricht Die neue Statusnachricht
   */
  public String getStatusnachricht(String benutzer) {

    String status = "";
    ResultSet rueckgabewert = null;
    try {
      String query = "select statusnachricht from benutzer where benutzername = ?";
      PreparedStatement anweisung = con.prepareStatement(query);

      anweisung.setString(1, benutzer);
      rueckgabewert = anweisung.executeQuery();

      // werdet den Rückgabewert aus
      while (rueckgabewert.next()) {
        status = rueckgabewert.getString(1);
      }
    } catch (SQLException e) {
      System.err.println(e.getClass().getName() + ": " + e.getMessage());
      System.exit(1);
    }

    return status;
  }