2010-05-26 31 views

回答

1

IMO沒有清潔靈活的解決方案。 Jodatime日期比JDBC本機類型(java.sql.Datejava.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 – 2012-03-27 23:25:00

相關問題