[英]Want to extend from java.sql.ResultSet
我想创建扩展java.sql.ResultSet
myRecordSet对象,并实现一个从SQL语句返回UTC日期的方法。
如何从java.sql.ResultSet
扩展,我需要一个例子。
10X
不要扩展ResultSet。 创建你的实体类,比如说Person
。 并实施'获取日期'方法。 像这样
class Person {
public Person(ResultSet resultSet) {
this.resultSet = resultSet;
}
...
public Date getBirthday() {
resultSet.getDate("BIRTHDAY_COLUMN");
}
...
}
你应该知道这个Person
类更像是包装器而不是纯实体。 而且使用它是OK
只有在你已经建立的连接和有效的ResultSet对象范围。
while (resultSet.next()) {
Person person = new Person(resultSet);
someAction(person);
someMoreActions(person);
}
为了使Person
更像实体,你可以考虑使用JPA
首先,你不扩展接口,但你实现了接口:)
也就是说,您可能正在寻找解决方案的错误方向。 忘记实现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
紧密耦合到模型中(实体,本例中为“Person”)是一个坏主意。 该模型不需要知道它是如何创建的,并且这样做可能只会泄漏数据库资源(因为该方法可能要求ResultSet
始终打开)并且可能导致您的应用迟早崩溃,因为数据库已耗尽资源。 不要那样做。
要获得有关DAO的更多想法和见解,您可能会发现本文很有用。
我想创建扩展java.sql.ResultSet的myRecordSet对象
很容易。 一个体面的IDE会为你做。
并实现一个从SQL语句返回UTC日期的方法。
不可能,因为你不能让你的数据库创建你的类的实例而不是它自己的实例。
所以你不想这样做。 你真正想做的是为ResultSet编写一个包装器 ,它与你从数据库中获得的任何内容进行对话,并添加你需要的任何功能。 这称为委托模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.