Oracle Datumsformat vergleichen

hans-sonny

Bekanntes Mitglied
So noch ein kleines Problem hab ich ...

und zwar muss ich überprüfen ob eine Ferien wohnung im angegebenen zeitraum frei ist.

ich ruf dazu das anreise und abreise datum aus der db ab und speicher es in zwei stirngs

dann les ich das datum gewünschte datum ein und speicher es ebenfalls in zwei strings


ist das dann sinnvoll über equals zu checken?


oder wie würdet ihr das machen



find es noch nicht sooo gut wen z.B. die wohnung vom 01.05-03.05 belegt ist

und das eingegebene anreise datum = 01.05 ist meckert es aber wenn es 02.05 wäre dann würde equals das nicht merken ...


jemand ne gute idee?
 
Warum in zwei Strings? Speichere es doch in Calendar-Objekten. Da kannst du dann auch schön mit before() und after() arbeiten. Das Eingabedatum kannst du bspw. über DateFormat parsen.
 
falls es doch irgendwie um Strings geht, ist auf jeden Fall zu beachten, die Reihenfolge umzustellen,

mit Jahr.Monat.Tag, und natürlich führenden 0en bei einstelligen Tagen/ Monaten, z.B. 2010.04.20,
kann man Date-Strings wunderbar als String vergleichen/ sortieren,

andersrum hat man erst alle Monatsersten usw.
 
Java:
out.printf("\nAbreisedatum (Form: DD-MM-YYYY): ");
        abreise = EINGABE.next();
        
        //----------------------------------------------------------------------
        //Buchungen der Ferienwohnung abfragen
        //Check ob Ferienwohnung im angegebenen Zeitraum frei ist
        ANREISE = stmt.executeQuery("SELECT Anreisedatum, Abreisedatum FROM Belegung WHERE Wohnungsnummer =" + objektnummer +"AND Anreisedatum =" + anreise +"And Abreisedatum =" +abreise);
        while(ANREISE.next()){
            count++;
        }
        
        if(count != 0){
            out.println(count);
        }


ich Probiere es so ... bekomme aber die fehlermeldung: Exception in thread "main" java.sql.SQLException: ORA-00932: Inkonsistente Datentypen: DATE erwartet, NUMBER erhalten


das verstehe ich aber nicht ... anreise und abreise sind strings ...

müssen die date format haben?

wenn ja wie les ich das ein und wie leg ich eine variable vom dateformat an?
 
Verwende PreparedStatements (dazu solltest du bei der Suche genügend Beispiele finden. Falls es trotzdem Probleme gibt, einfach noch einmal nachfragen) mit setDate. Dann kommt es gar nicht erst zu solcher Problematik, mit dem positiven Nebeneffekt, SQLInjection zum Großteil zu verhindern.
 
hab es so versucht:

Java:
//----------------------------------------------------------------------
        //Buchungszeitraum einlesen
        out.printf("\nAnreisedatum (Form: DD-MM-YYYY): ");
        anreise = EINGABE.next();
        
        out.printf("\nAbreisedatum (Form: DD-MM-YYYY): ");
        abreise = EINGABE.next();
        
        
        //Datum Parsen
        Date von = new Date();
        Date bis = new Date();

        SimpleDateFormat sdf = new SimpleDateFormat ("DD-MM-YYYY");
  
        von = sdf.parse(anreise);
        bis = sdf.parse(abreise);
        
        //----------------------------------------------------------------------
        //Buchungen der Ferienwohnung abfragen
        //Check ob Ferienwohnung im angegebenen Zeitraum frei ist
        ANREISE = stmt.executeQuery("SELECT Anreisedatum, Abreisedatum FROM Belegung WHERE Wohnungsnummer =" + objektnummer +"AND Anreisedatum =" + von +"And Abreisedatum =" + bis);
        while(ANREISE.next()){
            count++;
        }
        
        if(count != 0){
            out.println(count);
        }


bekomme jetzt die fehlermeldung


Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 'Y'
 
Y ist für SimpleDateFormat nicht erlaubt, das bedeutet die Fehlermeldung, falls das die Frage ist,

ist es zuviel verlangt, die Bedienungsanleitung der Klasse zu lesen oder irgendein funktionierendes Beispiel auf der Welt (im Internet) zu finden?
 
also es muss mit kleinem y sein ...


aber jetzt bekomm ich die Fehlermeldung

Exception in thread "main" java.sql.SQLException: ORA-00933: SQL-Befehl wurde nicht korrekt beendet
 
bevor ich auch hier die Lösung direkt erwähne wenn es nicht nervt eine Vorstufe:
gib dir den zusammengebauten SQL-String aus, fällt dir dabei etwas auf?

kannst du ihn in andere DB-Tools eintippen, kannst du testweise weniger Where-Bedingungen verwenden/ sonstwie die Anfrage vereinfachen?

----

bei jeder Frage hier im Forum wäre es eigentlich besser vorher zu überlegen was du selber dazu beitragen kannst,
du kannst doch nicht jeweils schon komplett am Ende aller Möglichkeiten stehen?

auf eigenes Denken zu verzichten und allein schneller von anderen die Lösung zu holen ist ganz schön gefährlich..

------

> also es muss mit kleinem y sein ...

bei manchem wie m/M sind sogar beide Varianten erlaubt und haben unterschiedliche Bedeutung..
 
Zuletzt bearbeitet von einem Moderator:
nein ich suche keine fertige lösung^^ ...

nur unterstützung ... kennt ihr das nicht dass ihr ewig den code anschaut und selber den fehler nicht mehr findet? ...


nein ich kann die SQL abfrage nicht vereinfachen...

ich seh den Fehler nicht in der SQL abfrage ...

und das dumme ist dass ich hier gerade in Italien bin und 4€/h fürs Internet zahlen muss und kein VPN geht ... d.H. ich muss über teamviewer auf den pc daheim damit ich alles testen kann^^ ... lächerilch oder?



naja wo liegt denn bei der SQL abfrage der Hund begraben? ...
 
wie würdest du denn sonst einen string entsprechend zusammenbauen? da fehlen doch einfach nur leerzeichen wo ist das problem?
 
Java:
ANREISE = stmt.executeQuery("SELECT Anreisedatum, Abreisedatum FROM Belegung WHERE Wohnungsnummer =" + objektnummer +" AND Anreisedatum =" + von +" AND Abreisedatum =" + bis);

ja wo denn ... hab noch leerzeichen rein gemacht .... aber immer noch selber fehler ...

SQL befehl wird nicht korrekt abgeschlossen



// Hat sich geklärt ... läuft nun ...

danke für eure hilfe
 
Zuletzt bearbeitet:

Zurück
Oben