# [OraclePreparedStatement] Problem bei SQL-Bedingungen



## poffi (24. Nov 2006)

Ich bastle gerade einen SQL, der alle Einträge lesen sollte, die in einem bestimmten Zeitraum liegen.
Die Parameter end und start grenzen den Zeitraum ein. Der Benutzer gibt den Zeitraum auf Tage genau an. Beim start-Datum wird die Zeit auf 00:00:00 gesetzt und beim end-Datum auf 23:59:59.

Gibt der Benutzer nun für beide Dati, das selbe Datum ein, sollten alle Einträge von dem angegebenen Datum (bzw. Tag) gelesen werden. Die Sql-Bedinung lautet nun also:


```
datum >= ? and datum  <= ?
```

Die Fragezeichen werden dann mit Hilfe der OraclePreparedStatement-Methode setDate durch die konkreten Werte ersetzt.


```
datum >= start and datum  <= end
```
Leider werden so keine Datensätze gefunden.

Stelle ich den Sql aber selber zusammen und führe in dann manuell über das Tool Toad aus, funktioniert es.

```
datum >= to_date('24.10.2006 00.00.00', 'dd.mm.yyyy HH24.MI.SS') and datum  <= to_date('24.10.2006 23.59.59', 'dd.mm.yyyy HH24.MI.SS')
```

Hat jemand eine Idee woran das liegen könnte? Kann ich irgendwie einsehen, wie der Sql nach dem ersetzen der ?-Parameter ausschaut? Bin dankbar über jeden Tipp!

mfg poffi


----------



## SlaterB (24. Nov 2006)

kann dazu nix sagen, nur ein allgemeiner Tipp:

wenn das ganze nur auf Tage genau funktioniert (Tag x 00.00),
dann probiere dochmal "=> Tag1 and <= Tag1+1", also beim End-Tag +1

ist im allgemeinen doch sauberer und schneller gemacht als die Zeit auf 23:59:59 zu setzen..


----------



## poffi (24. Nov 2006)

Vielen Dank für deine Antwort!

Habe ich mir eigentlich auch gedacht. Nur sind nicht alle Beteiligten damit zufrieden !

Hat jemand eine Idee woran es liegen könnte das die Datensätze nicht gelesen werden?


----------



## poffi (27. Nov 2006)

Ich habe gerade entdeckt, dass es für das OraclePreparedStatement die Methode setDate und setDATE gibt. DATE ist ein Oraclespezifischer Datumsformat. Weiss jemand wo konkret der Unterschied zwischen java.sql.date und oracle.sql.DATE liegt? Bzw. wann muss ich setDate und wann setDATE verwenden (oder ist das nicht entscheidend?)

Vielen Dank!


----------

