RomanS: Was ist falsch in diesem Select Syntax?

Hallo selfhtml,

Hoffentlich könnt ihr mir helfen, aus meiner sicht sollte genau das passieren was der SELECT auch aussagt, aber es wirft mir nur exceptions... :/

"SELECT count(*) FROM alarms WHERE "+day+"=1 AND hour >= "+hnow+" AND minute >= "+mnow+";"

day String
hnow, mnow int

Da muss irgentwas sein, was ich einfach übersehe...

Vielen dank im vorraus!

  1. Hi,

    Hoffentlich könnt ihr mir helfen, aus meiner sicht sollte genau das passieren was der SELECT auch aussagt, aber es wirft mir nur exceptions... :/

    "SELECT count(*) FROM alarms WHERE "+day+"=1 AND hour >= "+hnow+" AND minute >= "+mnow+";"

    Da muss irgentwas sein, was ich einfach übersehe...

    Ja - das hier.

    Du nennst uns weder den Wortlaut der Exceptions, noch hast du uns überhaupt fertigen SQL-Code gezeigt, sondern irgendeine Verarbeitungsstufe davor. Also bessere deine Problembeschreibung bitte erst mal in diesen zwei Punkten nach.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Du nennst uns weder den Wortlaut der Exceptions, noch hast du uns überhaupt fertigen SQL-Code gezeigt, sondern irgendeine Verarbeitungsstufe davor. Also bessere deine Problembeschreibung bitte erst mal in diesen zwei Punkten nach.

      Hallo Chris,

      Sorry, ich war mir ziemlich sicher das es sich irgendwo schon um invalides SQL handeln muss.

      Ich bin hier wohl auch nicht im richtigen board für Java. Aber das ist der code:

        
      		int day = cal.get(Calendar.DAY_OF_WEEK);  
      		int hnow = cal.get(Calendar.HOUR_OF_DAY);  
      		int mnow = cal.get(Calendar.MINUTE);  
      		while(!this.exists("SELECT count(*) FROM alarms WHERE "+days[day-1]+"=1 AND hour >= "+hnow+" AND minute >= "+mnow)){  
      			day++;  
      			// hier ist noch ein counter der den loop geg. killt  
      		}  
      
      
        
      	public boolean exists(String title){  
      		Cursor mCount= db.rawQuery(title+";", null);  
      		mCount.moveToFirst();  
      		int count= mCount.getInt(0);  
      		mCount.close();  
      		if(count > 0){  
      			return true;  
      		} else {  
      			return false;  
      		}  
      	}  
      
      

      Und es ist eine normale Nullpointer exception, was wohl heisst der Cursor hat kein ergebniss vom Query erhalten. Aber eben, die einträge existieren ...

      1. Tach!

        Sorry, ich war mir ziemlich sicher das es sich irgendwo schon um invalides SQL handeln muss.

        Die festen Teile sehen gültig aus. Also wird man den vermeintlichen Fehler erst im zusammengebauten Zustand erkennen können.

        while(!this.exists("SELECT count(*) FROM alarms WHERE "+days[day-1]+"=1 AND hour >= "+hnow+" AND minute >= "+mnow)){

        Was ist der Inhalt von days?

        public boolean exists(String title){

        Oder besser: Lass dir hier den Inhalt von title ausgeben oder schau mit dem Debugger nach, was der Inhalt ist. Damit bekommst du das eigentliche SQL-Statement angezeigt und kannst eventuelle Fehler darin erkennen.

        Cursor mCount= db.rawQuery(title+";", null);
          mCount.moveToFirst();
          int count= mCount.getInt(0);
          mCount.close();

        Und es ist eine normale Nullpointer exception, was wohl heisst der Cursor hat kein ergebniss vom Query erhalten.

        Und an welcher Stelle? Was genau ist null obwohl du etwas anderes erwartet hast? Ist es vielleicht bereits db?

        if(count > 0){
            return true;
          } else {
            return false;
          }

        Das lässt sich zu return count > 0; abkürzen

        dedlfix.

        1. Hi dedlfix

          Was ist der Inhalt von days?

          String[] days = {'mo','di','mi','do','fr','sa','so'};
          So heissen auch die felder in der DB

          Oder besser: Lass dir hier den Inhalt von title ausgeben oder schau mit dem Debugger nach, was der Inhalt ist. Damit bekommst du das eigentliche SQL-Statement angezeigt und kannst eventuelle Fehler darin erkennen.

          An das hab ich noch nicht gedacht, aber sieht sehr valide aus
          SELECT count(*) FROM alarms WHERE do=1 AND hour>=16 AND minute>=31

          Und an welcher Stelle? Was genau ist null obwohl du etwas anderes erwartet hast? Ist es vielleicht bereits db?

          Das hier wirft die exception...

          int count= mCount.getInt(0);

          musste es einfach mit
          int count= mCount.getCount();
          ersetzen!

          Jetzt funktioniert es wie erwünscht ;)

          Das lässt sich zu return count > 0; abkürzen

          java kann manchmal auch hübsch sein, danke :D

  2. Hallo

    was soll denn das für eine Schreibweise sein?
    WHERE "+day+" ??
    wo hast du deine Spaltennamen?
    Welche Fehler gibt es?
    welche Sprache benutzt du?

    Gruss
    hawk

    1. Hallo

      was soll denn das für eine Schreibweise sein?

      Die in dem moment für mich logischte ^^

      WHERE "+day+" ??
      wo hast du deine Spaltennamen?

      Der spaltenname ist das dynamische, der wert den es haben soll statisch
      es ist ein true|false für wochentage.

      Welche Fehler gibt es?

      Nullpointer exception, weil die Antwort leer ist

      welche Sprache benutzt du?

      Java (ughhh, aber android...)

      Gruss
      hawk

  3. Hi,

    "SELECT count(*) FROM alarms WHERE "+day+"=1 AND hour >= "+hnow+" AND minute >= "+mnow+";"

    Warum sind Stunde und Minute getrennte Spalten? Warum keine Zeit-Spalte?
    Kennt Dein (geheimgehaltenes) Datenbanksystem keinen Zeit-Datentyp?

    Die Abfrage hat so erhebliches Fehlerpotential.

    AND hour >= 16 AND minute >= 30

    sieht zwar auf den ersten Blick so aus, als würde es alle Zeiten nach 16 Uhr 30 liefern, tut es aber nicht (17:01 z.B. wird nicht gefunden - die Stunde ist zwar >= 16, aber die Minute nicht ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.