Мой простой ответ - нет, по разным причинам:
- ResultSet не соответствует спецификации JavaBeans (у него нет метода getter / setters и он не сериализуем).
Вместо этого заполните ResultSet в bean-компонент и используйте JSTL для извлечения данных из bean-компонента.
Для вашего отредактированного поста я предлагаю собрать все вместе (какКак прокомментировал BalusC, это может привести к SQL-инъекции) и следовать спецификации JavaBeans.
Это пример того, что я имел в виду:
Пользователь JavaBean:
public class UserEntity implements Serializable {
private String firstName;
private String middleName = "";
private String lastName;
private Gender gender;
private String emailAddress;
private Date birthDate;
private boolean searchable = false;
//Getters and Setters here...
}
MySQLUserDAO
, я отобразил свою сущность (javabean) из ResultSet
.
protected UserEntity mapEntity(ResultSet rs) throws SQLException {
// TODO Auto-generated method stub
UserEntity user = null;
if (rs != null) {
user = new UserEntity();
user.setId(rs.getLong("USER_ID"));
user.setFirstName(rs.getString("FIRST_NAME"));
user.setMiddleName(rs.getString("MIDDLE_NAME"));
user.setLastName(rs.getString("LAST_NAME"));
user.setEmailAddress(rs.getString("EMAIL_ADDRESS"));
String gender = rs.getString("GENDER");
if ("M".equals(gender)) {
user.setGender(Gender.MALE);
} else if ("F".equals(gender)) {
user.setGender(Gender.FEMALE);
}
user.setBirthDate(rs.getDate("DOB"));
user.setCreationDate(rs.getDate("CREATION_DATE"));
user.setSearchable(rs.getBoolean("SEARCHABLE"));
}
return user;
}
И, наконец, метод retrieve()
(из MySQLUserDAO
).
public UserEntity retrieve(Long id) throws DAOException {
// TODO Auto-generated method stub
PreparedStatement ps = null;
ResultSet rs = null;
UserEntity user = null;
try {
ps = getConnection().prepareStatement(SQL_RETRIEVE);
ps.setLong(1, id);
rs = ps.executeQuery();
if (rs != null && rs.next()) {
user = mapEntity(rs);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new DAOException(e);
} finally {
try {
close(rs, ps);
} catch (SQLException e) {
// TODO Auto-generated catch block
logger.error("Error closing statement or resultset.", e);
}
}
return user;
}
сейчас, чтобы использовать UserEntity
для JSP, я делаю ....
UserEntity user = MySQLUserDAO.retrieve(userId); //Pseudocode....
request.setAttribute("user", user);
и, используя JSTL, я могу сделать:
<c:out value="${user.firstName}">
, где user
- это имя атрибута иззапрос (который возвращает UserEntity user
) и firstName
вызывает user.getFirstName()
(метод из UserEntity
).
Надеюсь, вы последуете примеру BalusC.