Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या मैं JDBC कनेक्शन पूलिंग का उपयोग कर रहा हूँ?

मान लें कि यह BasicDataSource DBCP से है , तो हाँ, आप कनेक्शन पूल का उपयोग कर रहे हैं। हालांकि, आप प्रत्येक कनेक्शन अधिग्रहण पर एक और कनेक्शन पूल बना रहे हैं। आप वास्तव में एक ही पूल से कनेक्शन पूल नहीं कर रहे हैं। आपको एप्लिकेशन के स्टार्टअप पर केवल एक बार कनेक्शन पूल बनाना होगा और इससे हर कनेक्शन प्राप्त करना होगा। आपको कनेक्शन को आवृत्ति चर के रूप में भी नहीं रखना चाहिए। आपको यह सुनिश्चित करने के लिए कनेक्शन, स्टेटमेंट और परिणामसेट को भी बंद करना चाहिए कि अपवादों के मामले में भी संसाधन ठीक से बंद हैं। Java 7 का try-with-resources कथन इसमें मददगार है, कोशिश . होने पर यह संसाधनों को स्वतः बंद कर देगा ब्लॉक समाप्त हो गया है।

यहाँ एक छोटा सा पुनर्लेखन है:

public final class Database {

    private static final BasicDataSource dataSource = new BasicDataSource();

    static {
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/data");
        dataSource.setUsername("USERNAME");
        dataSource.setPassword("PASSWORD");
    }

    private Database() {
        //
    }

    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

}

(यदि आवश्यक हो तो इसे प्लग करने की क्षमता में सुधार के लिए एक अमूर्त कारखाने के रूप में फिर से तैयार किया जा सकता है)

और

private static final String SQL_EXIST = "SELECT * FROM users WHERE username=? AND password=?";

public boolean exist(User user) throws SQLException {
    boolean exist = false;

    try (
        Connection connection = Database.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_EXIST);
    ) {
        statement.setString(1, user.getUsername());
        statement.setString(2, user.getPassword());

        try (ResultSet resultSet = preparedStatement.executeQuery()) {
            exist = resultSet.next();
        }
    }       

    return exist;
}

जिसका उपयोग इस प्रकार किया जाना है:

try {
    if (!userDAO.exist(username, password)) {
        request.setAttribute("message", "Unknown login. Try again.");
        request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
    } else {
        request.getSession().setAttribute("user", username);
        response.sendRedirect("userhome");
    }
} catch (SQLException e) {
    throw new ServletException("DB error", e);
}

हालांकि एक वास्तविक जावा ईई वातावरण में आपको DataSource . के निर्माण का प्रतिनिधित्व करना चाहिए कंटेनर / एप्लिकेशन सर्वर पर और इसे जेएनडीआई से प्राप्त करें। टॉमकैट के मामले में, उदाहरण के लिए यह दस्तावेज़ भी देखें:http ://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में यूनिक आईडी कैसे जनरेट करें?

  2. एक एकल MySQL तैयार कथन w/PHP और PDO में एक सरणी कैसे सम्मिलित करें?

  3. डेटाबेस सेटअप करें और AWS Redshift और Mysql में केवल-पढ़ने के लिए उपयोगकर्ता बनाएं

  4. MySQL डेटाबेस मैनेजमेंट सिस्टम (DBMS) के वर्तमान संस्करण को कैसे पुनः प्राप्त करें?

  5. डेटाबेस को ऑप्टिमाइज़ करने के लिए MySQL परफॉर्मेंस ट्यूनिंग टिप्स