2010-05-26 6 views

ответ

1

Нет чистых и гибких решений IMO. Даты Jodatime более гибкие, чем родные типы JDBC (java.sql.Date, java.sql.Timestamp ...), и если вы наберете их, вы можете потерять информацию (часовые пояса). «Полную» реализацию (возможно, в обход getDate()/getTimestamp() и т. Д. Методы JDBC, например, с использованием строк) будут зависеть от вашего драйвера 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); 
} 
0

Я положу это там ... мы просто перенесли наш код, чтобы сделать это для iBatis и myBatis. Как отмечали все, с помощью java.sql ограничений время работы не очень интересно. Тем не менее, можно с правильной настройкой по крайней мере, с LocalDate и DateTime

Пожалуйста дайте обратную связь! Этот пакет является ранним

+0

Только что я опаздываю на вечеринку: https://github.com/LukeL99/joda-time-mybatis –