Announcement

Collapse
No announcement yet.

Datenbankabfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenbankabfrage

    Hallo zusammen,
    ich habe eine SQLITE-Db mit einer Tabelle, in der es nur eine Spalte 'start' gibt, die mit Datumswerten
    folgt gefüllt ist:

    start
    01.01.2011
    20.08.2012
    01.07.2011
    usw. ..

    Die Daten frage ich so ab:
    Code:
        public String getColTextDat() {
    
            SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
            String datum ="01.07.2011";
            Date d= new Date();
            String suchdat ="";
            try {
                d = (Date) sdf.parse(datum);
                suchdat = sdf.format(d.getTime());
                System.out.println(suchdat);
            } catch (ParseException e) {  e.printStackTrace(); }
    
            //Cursor crs = mDB.rawQuery("SELECT * FROM tabelle WHERE start >'01.07.2011'", null);
            Cursor crs = mDB.rawQuery("SELECT * FROM tabelle WHERE start <'"  + suchdat +  "'", null);
    
            String data= "";
                if(crs!= null && crs.getCount() > 0 && crs.moveToFirst()){
                do {
                    try {
                        data += crs.getString(crs.getColumnIndexOrThrow("start")) + "\n";
                    } catch (Exception e) { e.printStackTrace();  }
                } while (crs.moveToNext());
            }
            return data;
        }
    Die Abfrage mit ' = ' findet den richtigen Wert.
    Die Vergleichsabfrage mit ' < ', ' <= ' oder via 'between' liefert falsche Werte. Wie kann ich
    das deutsche Datumsformat '01.07.2011' passend umwandeln. Ich habe mich SimpleDateFormat versucht,
    führt mich aber keinen Deut weiter. Mir ist bekannt, dass SQLITE den Datumswert als Text abspeichert - die
    Speicherung ist auch so - , wie kann ich als den Vergleichswert für die Anfrage richtig codieren.

    Für Lösungshinweise danke ich.

    MfG
    Luko
    Starts
    05.02.2021
    Ends
    05.02.2021

  • #2
    Das Format ist
    YYYY-MM-DD HH:MM:SS
    oder wenn dir der Zeitteil egal ist
    YYYY-MM-DD

    Oder allgemeiner ISO8601. Da Sqlite keinen umfangreichen Datentyppool hat hat man ganz offensichtlich etwas gewählt das zum sortieren (und damit auch zum vergleichen mit größer/kleiner) funktioniert auch wenn man es wir Text behandelt. In diesem Format sind die Größen sauber von links(größer) nach rechts (kleiner) aufgebaut.

    Ich kenne das Framework das du benutzt zu wenig. Üblicherweise haben solche Datenbankzugriffssystem ein Konzept von Parametern die einen das Überführen von der Darstellung (den Datentypen) in der benutzten Programmiersprache zu der in der Datenbank abnehmen. Sollte es die geben solltest du die benutzen und nicht Spaltenwerte per Stringoperation in deine Abfragen einbauen.

    Comment

    Working...
    X