0

MySQLとJDBCを使用してJavaWebアプリケーションで接続プールを使用したいのですが、Apache Tomcat 6.0(6.0.35)で学ぶための非常に多くのリソースを見つけました-JNDI Datasource HOW-TO、しかしこの例ではJSTLコードを使用して取得方法を説明していますプールからの接続。同様に作業したいのですが、Bean、DAO、サーブレット、JSPで構成されるMVCアーキテクチャを最初から使用します。BalusCによる非常に優れたDAOチュートリアルから必要なものをすべて入手しましたが、チュートリアルの最後の部分で「接続プールはどうですか? 」と混乱しています。。誰かがこの接続プールのトピックとclose()方法について詳しく説明してもらえますか?

編集:
実際には、これも以前に追加する必要があります:
上記でリンクしたチュートリアルはJDK7の前にあるため、Connection自動的に閉じるtry-wth-resourceコードがあります。次に、接続プールを維持して接続を閉じるにはどうすればよいですか?チュートリアルと同じDAOコード(またはいくつかの変更)を使用してここにプールしますか?

4

1 に答える 1

1

アプリケーションが複数のユーザーによって使用される必要がある場合、connectionそれらのユーザーの何人かは時間を消費する新しいものを作成する代わりにconnection pool既存のものを再利用できます。メソッドについて: 接続プールはアクティブなままであり、アクセスのたびに接続を閉じないと、接続が山積みになり、数が増えると接続プールが詰まり、他の接続を受け入れなくなります!connectionconnectionclose()

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 に答える