0

我想在我的带有 MySQL 和 JDBC 的 java web 应用程序中使用连接池,我在Apache Tomcat 6.0 (6.0.35) - JNDI Datasource HOW-TO找到了一个非常值得学习的资源,但是这个例子使用 JSTL 代码来解释如何检索来自池的连接。我想以类似的方式工作,但从头开始使用由 Bean、DAO、Servlet 和 JSP 组成的 MVC 架构。我从 BalusC 的一个非常好的DAO 教程中得到了我想要的一切,但是我在教程的最后一部分说连接池怎么样?. 任何人都可以详细说明这个连接池主题和close()方法吗?

编辑:
其实我也应该早点添加这个东西:
因为我上面链接的教程出现在 JDK7 之前,它现在有Connection自动关闭的 try-wth-resource 代码,那么我们如何维护一个连接池并关闭一个连接在这里使用与教程中相同的 DAO 代码(或进行少量更改) ?

4

1 回答 1

1

如果您的应用程序需要由多个用户使用,则一个connection可以由一个用户持有,connection pool因此其中几个用户将重用现有的connection而不是创建新的connection,这将消耗时间。关于close()方法:连接池保持活动状态,如果每次访问后不关闭连接,连接会堆积,如果数量增加,连接池会堵塞,不再接受其他连接!

public class MyDao {

    private InitialContext context;
    private DataSource datasource;

    public MyDao() {

        try {

            Class.forName("com.mysql.jdbc.Driver");
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
            context = new InitialContext();
            datasource = (DataSource) context.lookup("datasource name");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }

    }
 public MyBean getMyBean() throws SQLException {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet res = null;

        String sql = "some query";
        try {
            connection = datasource.getConnection();//pool connection
            statement = connection.prepareStatement(sql);
            res = statement.executeQuery();
            while (res.next()) {
               //return true

            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

     finally {
            if (rs!= null) try { rs.close(); } catch (SQLException logOrIgnore) {}//result set if any
            if (stm!= null) try { stm.close(); } catch (SQLException logOrIgnore) {}//clase statement if any
            if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}//close connection
            }
            }


}//close MyDao
于 2012-04-11T14:23:13.297 回答