繁体   English   中英

使用连接池时在哪里关闭连接?

[英]Where to close the connection while using connection pooling?

我正在使用Vaadin框架并遵循MVC设计模式来开发Web应用程序项目。 在为我的项目实现连接池功能时,遇到以下问题。 我在一个类(数据类)中获取ResultSet,而在另一类(业务逻辑)中使用该ResultSet。 在业务逻辑类中使用该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 ,它将自动为您处理连接的关闭。 如果您无法更改Dao界面,则最好在Dao和业务层之间编写一个层。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM