Oracle SQL + Java

0

Witam,

Mam problem z uzyskaniem poprawnych wyników poniższego zapytania wykonywanego w Javie.

 ResultSet rs = getResultStatement("SELECT * FROM MECZ WHERE CAST(DATA_ROZPOCZECIA AS DATE) = '" + matchDate.toLocalDateTime().toLocalDate() + "'");

DATA_ROZPOCZECIA jest typu TIMESTAMP(0), a matchDate to java.sql.Timestamp. Kod nie generuje żadnych błędów, natomiast występuje tutaj problem z porównywaniem dat. Mianowicie nie po wykonaniu tego zapytania nie są znajdywane daty identyczne do tej, która jest w zmiennej matchDate, chociaż istnieją one w bazie. Po wykonaniu zapytania:

 rs = getResultStatement("SELECT CAST(DATA_ROZPOCZECIA AS DATE) FROM MECZ");

oraz po wypisaniu wyników w konsoli pojawia się:

2017-01-21
2017-01-21
2017-01-21

Po wypisaniu wyniku następującego kodu:

 matchDate.toLocalDateTime().toLocalDate()

Wyświetla się:

 2017-01-21

Dodam, że gdy zmienię znak porównania na ">" w pierwszym zapytaniu, to znajduje mi powyższe dane.
Jakie mogą być przyczyny takiego zachowania? Dlaczego zapytanie nie znajduje danych, które są identyczne z danymi porównywanymi?
Z góry dziękuję za pomoc!

1

https://oracle-base.com/articles/misc/oracle-dates-timestamps-and-intervals
Both DATE and TIMESTAMP columns contain a time component

do porównania potrzebujesz użyć funkcji TRUNC , żeby "przyciąć" czas z daty

1
  1. użyj jakiegoś ORMa zamiast samemu klecić zapytania
  2. jak już chcesz samemu klecić zapytania to użyj parametrów zamiast sklecać tak zapytanie podając datę jako string
  3. jak już chcesz samemu klecić zapytania bez parametrów to zamiast zrób tak "... WHERE trunc(DATA_ROZPOCZECIA) = To_date('" + format(matchDate, "yyyy-MM-DD") + "', 'yyyy-mm-dd')" chodzi o to abyś był pewny, że ZAWSZE format podawanej daty będzie taki sam jak oczekiwany format daty
0

Macie racje. Dzięki śliczne Panowie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1