vergleichende Datenbankabfrage

Status
Nicht offen für weitere Antworten.

copper

Mitglied
Hi ich möchte mit dieser DB Anfrage herausfinden ob eine Zeile besteht, welche zu diesen werten passt.
Falls ja also falls abrf = true, dann sollen in der Aufrufendne klasse bestimmt operationne ausgeführt werden.
Das Problem ist, dass abfrage immer true ist also auch wenn es keine PageID z.B. 100+1 gibt bzw. wenn es so eine gibt aber keine zugehörige zeit, welche kleiner ist als die zu vergeleichende.

Code:
public boolean getNachfolger(int pageID, java.util.Date zeitvoreinstellung){
         try{
             stmt = con.createStatement();
             String zeitvoreinst = "'"+zeitvoreinstellung+"'";
             boolean abfr =  stmt.execute("(SELECT * FROM sendedaten WHERE Zeitvoreinstellung <" +zeitvoreinst+"AND PageID ="+(pageID+1)+")");
             stmt.close();
             return abfr;             
         }
         catch(Exception e){
              System.out.println(e);
         }
         return false;
     }

Meine Fragen:
Ist diese java Methode dafür geeignet?
Ist die sql Anweisung korrekt? Eine Exception gibt es nicht.
Wie kann man so eine abfrage gestallten?

thx für die Antworten
 
Hi,

versuche es mal mit

Code:
ResultSet rset =  stmt.executeQuery(...);
boolean abfr = rset.first()

Gruß
Mag1c
 
Leider ist das Resultset leer. Bei jedem durchlauf.
Was sehr komisch ist.
Denn mit der ersten Methode ohne resultset. Wurde mir immer ein true zurückgegeben.

Jetzt bleibt das ResultSet immer leer. und ich bekomme logischerweise eine nullpointer exception


mhh

bin für ratschläge dankbar
 
Die Methode executeQuery(...) ist für normale Abfragen gedacht, also genau richtig für dich.
Wenn das ResultSet leer ist, dann wurde kein Ergebnis gefunden. Wenn ein Ergebnis
kommen müsste, dann stimmt was mit der Query nicht. Überprüfe die Query am besten
in einem SQL-Tool direkt auf der Datenbank (z.B. QuantumDB für Eclipse).

Gruß
Mag1c
 
Denn mit der ersten Methode ohne resultset. Wurde mir immer ein true zurückgegeben.
war ja richtig, schau halt mal in die API: das true heisst nur, dass das Ergebnis ein ResultSet war (eben ein leeres)

du kannst nicht ein Datumsobjekt mit toString() zu einem String verwandeln und hoffen, dass < auf der DB das richtig macht

ist "01.12.1997" < "01-12-1997"?


schau in die Doku zu deiner DB bei den Datumsfunktionen und verwende ein preparedStatement mit setDate, damit das Datum im richtigen Format in den SQL-String eingefügt wird
 
Jo klar,
ist natürlich richtig, dass sich ein String und eine Zeit nicht einfach so vergl. lassen. Ich war der Annahme, dass der String (00:00:01 oder so) welcher an die DB übergeben wird als Zeit interpretier wird.
Sonst ist die Abfrage für mysql DB so OK. Hab es auch mit phpmyadmin getestet.

hier nochmal der Funktionierende Quellcode:
Code:
public boolean getNachfolger(int pageID,java.sql.Time zeitvoreinstellung){
            try{
                
                prestmt = con.prepareStatement("SELECT * FROM sendedaten WHERE Zeitvoreinstellung <= ? AND PageID = ?");
                prestmt.setTime(1,zeitvoreinstellung);
                pageID = pageID +1;
                prestmt.setInt(2,pageID);
                rsnachfolger = prestmt.executeQuery();
                return rsnachfolger.first();             
            }
            catch(Exception e){
                System.out.println(e);
            }
            return false;
}

thx man
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben