Во-первых, вы не расширяете интерфейсы, но вы реализуете интерфейсы:)
Тем не менее, вы, вероятно, ищете неправильное направление для решения. Забудьте о реализации вашего ResultSet
и просто создайте класс DAO, который выполняет все задачи отображения ResultSet
<-> Entity
и выполняет желаемое преобразование даты именно там. Метод DAO может выглядеть как
public Person find(Long id) throws SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
Person person = null;
try {
connection = database.getConnection();
preparedStatement = connection.prepareStatement(SQL_FIND);
preparedStatement.setLong(1, id);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
person = new Person();
person.setId(resultSet.getLong("id"));
person.setName(resultSet.getString("name"));
person.setBirthDate(resultSet.getDate("birth_date"));
// ...
}
} finally {
close(connection, preparedStatement, resultSet);
}
return person;
}
Видите ли, если тип столбца базы данных DATE
, DATETIME
или TIMESTAMP
, то вы можете просто использовать ResultSet#getDate()
, чтобы получить его как java.util.Date
объект. Чтобы отобразить дату в нужном формате на уровне представления, используйте прилагаемые инструменты, такие как SimpleDateFormat
для «простой Java», fmt:formatDate
для страниц JSP, f:convertDateTime
для JSF и т. Д.
Тесное связывание ResultSet
внутри модели (сущность, «Человек» в этом примере) - плохая идея. Модель не должна ничего знать о том, как она была создана, и что это может привести только к утечке ресурсов БД (поскольку при таком подходе может потребоваться постоянное открытие ResultSet
), что может привести к сбою вашего приложения раньше или позже, потому что в БД закончились ресурсы. Не делай этого.
Чтобы получить больше идей и идей о DAO, вы можете найти эту статью полезной.