# java sql abfrage bestimmer Datumszeitraum



## NichtExpert (21. Okt 2020)

Hallo liebe Community,

bräuchte mal wieder Hinweise von euch.
In der Datenbank werden täglich Einträge gemacht. Nun schreibe ich ein Tool, welches nur die geforderten Daten liefert und damit man keine Einträge in der Datenbank beschädigen kann.
Wenn man das Programm startet, soll das aktuelle/derzeitige Datum und die 6 Tage davor als Startdatum genommen werden (bsp. von 21.10 - 15.10).
An diesem Punkt scheitere ich.
Gibt es einen SQL-Befehl, mit dem man dann das Datum einstellen kann?
Ich kenne nur festgelegte Zeiträume bei SQl z.B. " SELECT * FROM Tabelle WHERE datum >= '15.10.2020' AND datum <= '21.10.2020' ".
Gibt es nun einen oder muss ich das ganze in Java zusammen setzen.
Man kann das aktuelle Datum über LocalDate benutzen aber wie schaffe ich es, automatisch von dem aktuellen Datum 6 Tage zurückzugehen?

Freue mich über Hinweise, Antworten, Links, etc.


----------



## mihe7 (21. Okt 2020)

Dafür verwendet man z. B. PreparedStatements, allerdings müsste man schon wissen, mit welcher API Du auf die DB zugreifst.


----------



## NichtExpert (21. Okt 2020)

Ich weiß jetzt nicht genau was du von mir forderst.
Ich nenn mal einfach ein paar Sachen😅
Entwicklungsumgebung:   Intellij
Datenbanksystem:             HeidiSQL
JDBC-Treiber:                    JTDS vers. 1.3.1

Hoffentlich ist da das dabei, was du wissen wolltest😅🙈


----------



## Thallius (21. Okt 2020)

Fängt schon damit an, dass du anscheinend nicht mal weißt was eine Datenbank ist. Und dein Datumsformat ist komplett unbrauchbar. Dafür gibt es extra DATE and DATETIME typen in Datenbanken damit man eben mit diesen auch vergleichen und rechnen kann.


----------



## mihe7 (21. Okt 2020)

Deiner Beschreibugng nach greifst Du per JDBC auf die DB zu. Allerdings: JTDS ist doch ein Treiber für Microsoft SQL-Server. Du brauchst doch irgendwas wie Connector/J, oder? Naja, wenn Du mit Deinem Setup auf die DB zugreifen kannst, scheint es ja zu passen.


```
private static final String QUERY = "SELECT Feld1, Feld2 FROM Tabelle WHERE datum >= ? and datum <= ?";

public void query(Connection conn, LocalDate fromDate, LocalDate toDate) throws SQLException {
    try(PreparedStatement stmt = conn.prepareStatement(QUERY)) {
        stmt.setObject(1, fromDate); // erstes ? in QUERY
        stmt.setObject(2, toDate); // zweites ? in QUERY
        try(ResultSet rs = stmt.executeQuery()) {
            // behandle das ResultSet
        }
    }
}
```


----------



## NichtExpert (21. Okt 2020)

Das Datenbanksystem ist zwar HeidiSQL, aber die Datenbank selbst ist von Microsoft.
Ich habe das ganze nicht erwähnt, weil die Abfrage nicht anders ist.


----------



## mihe7 (21. Okt 2020)

Wie geschrieben: wenns funktioniert, ist es ja ok  Musst Du mal testen, ob der JDBC-Treiber LocalDate als Object unterstützt.


----------



## macaubas (21. Okt 2020)

Hallo NichtExpert,
In Oracle würde ich schreiben
Select * from tabelle where datum > sysdate - 6 ,wobei natürlich datum nicht grösser als die aktuelle Zeit sein darf.
In MsSql gibts ja scheinbar statt sysdate getdate()


----------



## mihe7 (21. Okt 2020)

@macubas hat Recht: es geht ja nur um das aktuelle Datum


----------



## NichtExpert (23. Okt 2020)

Vielen Dank @macaubas. Dir natürlich auch @mihe7 😊


----------

