Mam bazę danych w której przechowuję przypomnienia (każde przypomnienie posiada swoją zawartość, maila i i datę do wysłania w formacie LocalDateTime). Kiedy przygotowuję zapytanie do bazy danych ustawiam datę za pomocą setTimestamp wewnątrz której zamieniam obiekt klasy LocalDateTime na Timestamp (funkcja valueOf). Niestety przy odbiorze danych z bazy danych (analogicznie używam getTimestamp i konwersji z Timstamp na LocalDateTime (funkcja toLocalDateTime)) godzina zeruje się.
Przykładowy wypis przy testowaniu - pierwsza linijka to wartość oczekiwana druga to wypisana z bazy danych z wyzerowaną godziną.
public class ReminderController {
private static final String GET_REMINDERS_QUERY = "SELECT * FROM reminders where mail=?";
private static final String DELETE_ALL_QUERY = "DELETE FROM reminders where mail=?";
private static final String DELETE_QUERY = "DELETE FROM reminders where mail=? and content=? and timeToSend=?";
public static void removeAllReminders(String userMail) {
PreparedStatement stmt = null;
try {
stmt = Registry.getConnection().prepareStatement(DELETE_ALL_QUERY);
stmt.setString(1, userMail);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public static void removeReminder(SingleReminder reminder) {
PreparedStatement stmt = null;
try {
stmt = Registry.getConnection().prepareStatement(DELETE_QUERY);
stmt.setString(1, reminder.getMail());
stmt.setString(2, reminder.getContent());
stmt.setTimestamp(3, Timestamp.valueOf(reminder.getDateToSend()));
System.out.println(Timestamp.valueOf(reminder.getDateToSend()));
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public static ArrayList<SingleReminder> collectUserReminders(String userMail) {
ArrayList<SingleReminder> remindersList = new ArrayList<SingleReminder>();
PreparedStatement stmt = null;
try {
stmt = Registry.getConnection().prepareStatement(GET_REMINDERS_QUERY);
stmt.setString(1, userMail);
ResultSet rsReminders = stmt.executeQuery();
while (rsReminders.next()) {
remindersList.add(createReminder(rsReminders, userMail));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return remindersList;
}
private static SingleReminder createReminder(ResultSet rs, String userMail) throws SQLException {
return new SingleReminder(userMail, rs.getString("content"), rs.getTimestamp(3).toLocalDateTime());
}
}
Wypisywanie z bazy danych:
PreparedStatement stmt = dbConnection.prepareStatement(SELECT_QUERY);
ResultSet rsReminders = stmt.executeQuery();
List<SingleReminder> listOfReminders = new ArrayList<>();
while (rsReminders.next()) {
listOfReminders.add(new SingleReminder(rsReminders.getString(1), rsReminders.getString(2),
rsReminders.getTimestamp(3).toLocalDateTime()));
}