我正在使用Vaadin框架并遵循MVC设计模式来开发Web应用程序项目。 在为我的项目实现连接池功能时,我遇到了以下问题。 我在一个类(数据类)中获取ResultSet,我在另一个类(业务逻辑)中使用该ResultSet。 在业务逻辑类中使用ResultSet之后,我必须关闭连接对象。 在不将连接对象传递给业务逻辑类的情况下,实现此目的的有效方法是什么? 请解释一下。谢谢。
答案 0 :(得分:1)
我建议你写一个Dao,它返回一个Business Objects列表而不是结果集。连接必须在Dao本身关闭。以下是一个例子
public class PersonDao {
private DataSource ds; //add a setter and inject the JDBC resource
public List<Person> getPersons() {
List<Person> personList = new ArrayList();
Connection con;
PreparedStatement pstmt;
try {
con = ds.getConnection(username, password);
pstmt = con.prepareStatement("SELECT * FROM PERSON");
ResultSet rs = pstmt.executeQuery(query);
//Fetch the resultset, iterate over it and populate the list
while (rs.next()) {
Person p = new Person();
p.setName(rs.getString("name");
personList.add(p);
}
} catch (Exception ex {
// ... code to handle exceptions
} finally {
if (con != null) con.close();
}
return personList;
}
如果您可以使用Java 7,您还可以使用try with resource来自动处理关闭连接。如果您无法更改Dao界面,那么在Dao和业务层之间编写一个层是个好主意。