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

标签 java database connection-pooling psql vaadin7

我正在使用 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/

相关文章:

delphi - 如何在 DBX 中使用连接池?

activerecord - 如何增加heroku上的ActiveRecord线程池大小

java - 如何在 Java 中声明类类型数组

java - 如何将 python Bolt 集成到 Apache Storm 的 Java 拓扑中?

database - 将数据文件添加到 MS SQL Server 中的主文件组

sql - 多对多选择查询

java - 根据 JobParameters 动态切换 ItemProcessor

java - com/sun/deploy/util/WinRegistry 抛出 ClassNotFoundException Intellij Idea

sql - 如何在数据库中检查空标题?

python - 如果预 ping 检查失败,SqlAlchemy 数据库池中的预 ping 功能是否会自动重新连接并发送 SQL 命令?