получение DateTime из ResultSet в JdbcTemplate - PullRequest
6 голосов
/ 11 августа 2011

в базе данных мой столбец имеет тип TIMESTAMP, поэтому у моего класса есть свойства типа Datetime, например:

public void setDiscoveryDate(final DateTime discoveryDtTm) {
        this.discoveryDtTm = discoveryDtTm;
    }

, теперь в JdbcTemplate я хочу получить его, поэтому некоторый код, подобный этому:

variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm"));

, который не работает, потому что в столбце get для набора результатов я не смог найти то, что возвращает DateTime, я видел только getDate или getTime.

Ответы [ 2 ]

14 голосов
/ 11 августа 2011

Это потому, что DateTime не является стандартным типом Java. Если вы имеете в виду тип JodaTime, попробуйте следующее:

variant.setDiscoveryDate(
   new DateTime(rs.getTimestamp("discovery_dt_tm").getTime())
);

Это сломается, если rs.getTimestamp вернет null, поэтому вы можете разбить это на более мелкие операторы и добавить проверки для null.

Обратите внимание, что это можно сделать проще, поскольку конструктор DateTime принимает java.util.Date, который Timestamp является подклассом:

variant.setDiscoveryDate(
   new DateTime(rs.getTimestamp("discovery_dt_tm"))
);

Но это также неправильно из-за плохого дизайна класса Timestamp (объяснение см. javadoc ).

Придерживайтесь первого примера (с getTime())

1 голос
/ 11 августа 2011

Попробуйте с:

variant.setDiscoveryDate(new DateTime(rs.getTimestamp("discovery_dt_tm").getTime()));
...