# vergleichende Datenbankabfrage



## copper (27. Sep 2005)

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.


```
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


----------



## Mag1c (27. Sep 2005)

Hi,

versuche es mal mit


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

Gruß
Mag1c


----------



## copper (27. Sep 2005)

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


----------



## Mag1c (27. Sep 2005)

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


----------



## Bleiglanz (28. Sep 2005)

> 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


----------



## copper (28. Sep 2005)

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:

```
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


----------

