Aufgabenjournal mit Monatskalender

mrkennedie89

Mitglied
Hallo,

ich arbeite gerade an einer App bei der die User an bestimmten Tagen Aufgaben erledigen sollen. Im Nachhinein können sie sich dann z.B. alle erledigten Aufgaben
für einen bestimmten Monat als PDF ausgeben lassen. Ich habe bereits eine Room-Datenbank angelegt, und es auch schon geschafft, dass beim Drücken eines Buttons alle Aufgaben mit Datum und Uhrzeit in einem erzeugten PDF Dokument geschrieben werden. Allerdings erscheint nur das Datum immer an dem eine Aufgabe erledigt worden ist. Ziel ist es jedoch alle Tage eines Monats anzeigen zu lassen und rechts daneben in einer neuen Spalte dann entsprechend noch die Einträge, wann Aufgaben erledigt worden sind.

Nun stehe ich vor der Entscheidung wie ich es umsetzen kann.

Ich habe mir gedacht, dass ich einen Monats- und Jahres-Picker implementiere. Wählt dann der User einen bestimmten Monat aus, so nutze ich den Wert um alle Tage des Monats in der PDF mit calender.set() automatisch hineinschreiben zu lassen. Mit einer if-Abfrage prüfe ich dann, ob das Datum mit dem Datum aus der Datenbank übereinstimmt und wenn ja, soll die Aufgabe zu dem bestimmten Tag hinzugefügt werden.

Kann man das so machen, oder ist das viel zu ressourcenlastig?
Habe leider nach längerer Recherche keine andere Möglichkeit gefunden. Ich frage mich auch, ob alle Aufgaben mit der Zeit in einem einzigen table
in der Datenbank gespeichert werden sollen, oder ob für jeden Monat ein neuer table irgendwie automatisch? generiert werden soll? Macht das einen Unterschied?
 

Jw456

Top Contributor
Jeden Monat eine neue Tabelle macht für mich keinen Sinn.
Du willst ja mit einer Abfrage einfach einen bestimmen Bereich Tag, Monat, Woche, Jahr … abfragen.

Frage deine DB doch genau nach dem Bereich ab. So dass du genau die Daten zurück bekommst die du brauchst und nicht mehr.
 

mrkennedie89

Mitglied
Jeden Monat eine neue Tabelle macht für mich keinen Sinn.
Du willst ja mit einer Abfrage einfach einen bestimmen Bereich Tag, Monat, Woche, Jahr … abfragen.

Frage deine DB doch genau nach dem Bereich ab. So dass du genau die Daten zurück bekommst die du brauchst und nicht mehr.
Hi, danke für dein Feedback. Jetzt hab ich es geschafft alle Tage des Monats in der PDF anzeigen zu lassen usw.
Auch ein DatePicker ist implementiert, wo der User den Monat und das Jahr auswählen kann. Das Problem ist nur, dass ich
ja jetzt für jeden Monat und jedes Jahr, das vom User ausgewählt worden ist, eine @Query-Abfrage an die Datenbank senden müsste.

D.h. für ein einziges Jahr 12 x @Query(SELECT .....).
Ich weiß nicht, aber irgendwie denke ich, dass das alles viel zu umständlich ist, bzw., ob es nicht andere Möglichkeiten gibt. Hast du oder vielleicht
Jemand anderes noch eine Idee?
 

KonradN

Super-Moderator
Mitarbeiter
Hi, danke für dein Feedback. Jetzt hab ich es geschafft alle Tage des Monats in der PDF anzeigen zu lassen usw.
Auch ein DatePicker ist implementiert, wo der User den Monat und das Jahr auswählen kann. Das Problem ist nur, dass ich
ja jetzt für jeden Monat und jedes Jahr, das vom User ausgewählt worden ist, eine @Query-Abfrage an die Datenbank senden müsste.

D.h. für ein einziges Jahr 12 x @Query(SELECT .....).
Ich weiß nicht, aber irgendwie denke ich, dass das alles viel zu umständlich ist, bzw., ob es nicht andere Möglichkeiten gibt. Hast du oder vielleicht
Jemand anderes noch eine Idee?
Da verstehe ich jetzt gerade Dein Problem nicht ganz.

Du kannst auf einer Tabelle mehrere Abfragen definieren. Wenn Du eine Query hast, die einen Monat zurück gibt und Du nun aber auch ganze Bereiche brauchst, dann kannst doch auch eine Abfrage bauen, die z.B. einen Start-Monat und ein Ende-Monat entgegen nimmt, so dass Du nur eine einzige Abfrage durchführen musst. (Wobei ich da nicht wirklich ein Problem sehe, wenn da mehrere Datenbankabfragen stattfinden. Das ist ja weiter eine kleine Anzahl Abfragen.)
 

mrkennedie89

Mitglied
Da verstehe ich jetzt gerade Dein Problem nicht ganz.

Du kannst auf einer Tabelle mehrere Abfragen definieren. Wenn Du eine Query hast, die einen Monat zurück gibt und Du nun aber auch ganze Bereiche brauchst, dann kannst doch auch eine Abfrage bauen, die z.B. einen Start-Monat und ein Ende-Monat entgegen nimmt, so dass Du nur eine einzige Abfrage durchführen musst. (Wobei ich da nicht wirklich ein Problem sehe, wenn da mehrere Datenbankabfragen stattfinden. Das ist ja weiter eine kleine Anzahl Abfragen.)
Das Problem ist, dass ich pro Jahr ganze zwölf Anfragen definieren muss.
Wenn der User zum Beispiel in dem DatePicker den Monat Januar 2023 auswählt, und von allen Tagen des Monats eine PDF erzeugen lassen will, dann muss ich ja die Werte die zwei Werte die mir der Picker gibt, nehmen und darauf basierend die Datenbank nach allen tagen des spezifischen Monats im gewählten Jahr als PDF ausgeben.

Java:
int choosenMonth;
int choosenYear;

if (chooseMonth = 1 && choosenYear = 2023 ){
    queryAllJanuary2023();
}

else if (chooseMonth = 2 && choosenYear = 2023 ){
    queryAllFebruary2023();
}

......

Es kann doch nicht sein, dass ich für 5 Jahre 60 verschiedene Anfragen in der Datenbank definieren muss. Oder ist das normal?
Mir fehlt leider das Wissen darüber, ob es für solche Probleme elegantere Lösungswege gibt.
 

Jw456

Top Contributor
wie schaut den deine Tabelle aus wie speicherst du das Datum?

wenn du es als String hast etwa so


Java:
//SimpleDateFormat("yyyy-MM-dd");

    public Cursor datenBereich (String von , String bis) {

        Cursor cur = null;

        String[] spalten = new String[]{" deine Spalten zb _id, datum,... "};
        cur = db.query(tabelle,
                spalten,
                "datum >= '" + von  + "'AND datum <= '" + bis + "' ",
                null,
                null,
                null,
                "datum ASC");
        return cur;

    }
 

KonradN

Super-Moderator
Mitarbeiter
Wie sehen denn diese Methoden aus? queryAllJanuary2023 und queryAllFebruary2023 dürften doch fast identisch sein.

Wenn Du den Code vergleichst, dann wirst Du den bestimmt vereinheitlichen können, so dass Du dann sowas hast wie query(month, year).
Also wenn Du sowas nicht direkt aufbaust, dann wäre es über die typische Refakturierung von doppeltem Code zu machen.
 

Neue Themen


Oben