我正在使用 Vaadin 框架并遵循 MVC 设计模式来开发 Web 应用程序项目。 在为我的项目实现连接池功能时,我遇到了以下问题。 我在一个类(数据类)中获取结果集,并在另一个类(业务逻辑)中使用该结果集。 在业务逻辑类中使用该 ResultSet 后,我必须关闭连接对象。 在不将连接对象传递给业务逻辑类的情况下实现此目的的有效方法是什么? 请解释一下。谢谢。
最佳答案
我建议您编写一个返回业务对象列表而不是结果集的 Dao。连接必须在 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 接口(interface),那么在 Dao 和业务层之间编写一个层是一个好主意。
关于java - 使用连接池时在哪里关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21475764/