Logikproblem bzw. Denkfehler

mlkike

Mitglied
Hey community,

ich stehe grade vor einem Problem und habe wohl eine Denkblockade und komme einfach nicht weiter.

Folgende Situation:

Ich habe eine Datenbank aus der mit einer for schleife "Buchungen" ausgelesen werden.
Diese Buchungen beinhalten folgende Werte: Grund, Wert, Datum, Gebucht

Das Problem findet sich bei: Gebucht

Dieser Wert ist ein String und beinhaltet entweder 0 (nicht gebucht) oder 1 (gebucht).

Bei jedem Start wird die Methode zum Laden und überprüfen der Buchungen aufgerufen und soll prüfen, ob das gewählte Datum erreicht wurde und ob die Buchung bereits ausgeführt wurde oder nicht.

Datum erreicht -> prüfen ob bereichts gebucht oder nicht -> nicht gebucht -> buchen und Gebucht wert auf "1" setzen.

Beim nächsten Start wird diese Buchung mit dem neuen Gebucht Wert allerdings ignoriert, da sie ja nun bereits gebucht ist.
Das Problem ist aber, dass der Grund dennoch geladen werden soll.

Etwas kompliziert zu erklären, hier mal der Code:

Java:
  private void loadBuchungFromDB() {
        try {
            todaysDate = dateformat.parse(actualDate);
            System.out.println("Todays Date: " + todaysDate);

        } catch (ParseException e) {
            System.out.println("TodaysDate Parse Error: " + e.toString());
        }

        StringBuilder sb = new StringBuilder();

        List<Buchung> buchung = db.getAllBuchungen();

        for (Buchung cn : buchung) {

            //Testing phase: check date and ONLY if date is reached or over: write to historietf
            String date = cn.getDate();
            String log = "Grund: " + cn.getGrund() + " | " + "Wert: " + cn.getWert() + "€";
            String booked = cn.getBooked();

            try {
                if (!(date == null)) {

                    if (booked.equals("0")) {
                        System.out.println("DatumAsString: " + date);

                        Date realDate = dateformat.parse(date);
                        System.out.println("DatumAsDate: " + realDate);

                        if (todaysDate.getTime() == realDate.getTime() || todaysDate.getTime() > realDate.getTime()) {
                            System.out.println("Datum erreicht oder verstrichen!");

                            sb.append(log);
                            sb.append("\n");
                            System.out.println("Log: " + log);

                            guthaben = guthaben + cn.getWert();
                            System.out.println("cn.getWert: " + cn.getWert() + "_" + "guthaben: " + guthaben);

                            booked = "1";
                            cn.setBooked(booked);

                            db.updateBuchung(cn);

                            Toast.makeText(this, "Datum erreicht: Buchung ausgeführt", Toast.LENGTH_SHORT).show();

                        } else {
                            System.out.println("Datum nicht erreicht");
                        }
                    } else {
                        System.out.println("Bereits gebucht");
                    }
                } else {

                    System.out.println("Log: " + log);
                    sb.append(log);
                    sb.append("\n");

                }

            } catch (NullPointerException e) {
                System.out.println("Not date found");
            } catch (ParseException e) {
                System.out.println("Parse Exception: " + e.toString());
            }
        }

        float guthabenformatted = guthaben;
        System.out.println("Guthabenformatted: " + df.format(guthabenformatted));

        kstand.setText(df.format(guthabenformatted) + "€");
        System.out.println("kstand after loading from DB: " + String.valueOf(kstand.getText()));

        historietf.setText(sb.toString());
    }
 

Thallius

Top Contributor
Nur mal so nebenbei bemerkt. Was Du da vorhast ist eigentlich mit zwei Query in der DB gemacht. Warum machst du selber wofür die DAtenbank eigentlich gedacht ist?

Gruß

Claus
 

mlkike

Mitglied
Nur mal so nebenbei bemerkt. Was Du da vorhast ist eigentlich mit zwei Query in der DB gemacht. Warum machst du selber wofür die DAtenbank eigentlich gedacht ist?

Gruß

Claus


Du meinst SELECT... WHERE... und dann die Abfragen?
Ehrlich gesagt, kam mir das bis jetzt noch nicht in den Sinn, was aber auch gut daran liegen kann, dass ich bis auf den schulischen DB Unterricht nicht viel mit DB's gemacht habe aber danke für den Tipp, das muss ich mir mal anschauen :D

Konnte mein Problem lösen, allerdings besteht diese Prüfung jetzt aus Switch Case Bedingungen, was zwar funktioniert aber nicht sehr elegant gelöst ist.

MFG
 

BRoll

Bekanntes Mitglied
Öhhm ich weiß ja nicht was ihr im DB Unterricht gelernt habt, aber genau für sowas ist eine Datenbank da o.o
Wenn du einfach alle Daten aus der DB liest, und dann lokal im Programm filterst, hebelt dass doch das ganze System aus.
Das was du da baust ist ehrlich gesagt ein extremer Performance und Netzwerk-killer. Also wenn dein Programm später mal
verwendet werden soll, musst du das auf jeden fall in SQL Statements auslagern. Man hört ja immer wieder mal nette Geschichten,
bei denen Firmen einfache Programme von Praktikanten usw. im großen Maßstab einsetzt und man plötzlich Ladezeiten von mehreren
Minuten hat, und keiner weiß dann warum. Aber wenn das jetzt nur ein kleines Übungsprojekt ist kannst du es auch erstmal so lassen : )
 

mlkike

Mitglied
Öhhm ich weiß ja nicht was ihr im DB Unterricht gelernt habt, aber genau für sowas ist eine Datenbank da o.o
Wenn du einfach alle Daten aus der DB liest, und dann lokal im Programm filterst, hebelt dass doch das ganze System aus.
Das was du da baust ist ehrlich gesagt ein extremer Performance und Netzwerk-killer. Also wenn dein Programm später mal
verwendet werden soll, musst du das auf jeden fall in SQL Statements auslagern. Man hört ja immer wieder mal nette Geschichten,
bei denen Firmen einfache Programme von Praktikanten usw. im großen Maßstab einsetzt und man plötzlich Ladezeiten von mehreren
Minuten hat, und keiner weiß dann warum. Aber wenn das jetzt nur ein kleines Übungsprojekt ist kannst du es auch erstmal so lassen : )

Glücklicherweise dient das nur zu Übungszwecken, bzw. ist eine Android APP für mich, die ich ganz gut verwenden kann.
Hättet ihr ein allgemeines Beispiel einer solchen Abfrage?
Ich erinnere mich noch an SELECT * FROM table WHERE date ... und dann today oder after?

MFG
 

Thallius

Top Contributor
Also es würde natürlich Sinn machen Du ließt Dich einfach mal in SQL ein. Denn ich kann Dir jetzt zum Beispiel sagen das Du mit

SQL:
UPDATE table SET gebucht=1 WHERE datum<CURDATE()

alle Datensätze auf gebucht setzt die von gestern oder älter sind. Aber ob Dir das wirklich hilft?
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Java Themen


Oben