Нет чистых и гибких решений, ИМО. Даты Jodatime более гибкие, чем нативные типы JDBC (java.sql.Date
, java.sql.Timestamp
...), и если вы отобразите их, вы можете потерять информацию (часовые пояса). «Полная» реализация (возможно, в обход методов JDBC getDate()
/ getTimestamp()
и т. Д., Например, с использованием строк) будет зависеть от вашего драйвера и базы данных JDBC (и практически ни одна из баз данных не имеет такого типа даты и времени, как у Jodatime). *
Вот довольно тривиальная реализация, которую я однажды сделал для LocalDateTime
. Не очень проверено, и предполагается, что ваши метки времени БД представляют собой локальные даты.
public Object getResult(ResultGetter getter) throws SQLException {
Timestamp date = getter.getTimestamp();
if(date == null) return null;
LocalDateTime ldt = null;
try {
ldt = LocalDateTime.fromDateFields(date);
} catch(IllegalArgumentException e) {
throw new SQLException("illegal value for a LocalDateTime : " + date);
}
return ldt;
}
public void setParameter(ParameterSetter setter, Object parameter) throws SQLException {
java.sql.Timestamp date = null;
if(parameter != null) {
LocalDateTime ldt = (LocalDateTime) parameter;
date = new Timestamp(ldt.toDateTime().getMillis());
}
setter.setTimestamp(date);
}