Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tôi có đang sử dụng tổng hợp kết nối JDBC không?

Giả sử rằng đó là BasicDataSource là từ DBCP , thì có, bạn đang sử dụng một nhóm kết nối. Tuy nhiên, bạn đang tạo lại một nhóm kết nối khác trên mỗi lần có được kết nối. Bạn không thực sự gộp các kết nối từ cùng một nhóm. Bạn chỉ cần tạo nhóm kết nối một lần khi khởi động ứng dụng và nhận mọi kết nối từ nó. Bạn cũng không nên giữ kết nối như một biến thể hiện. Bạn cũng nên đóng kết nối, câu lệnh và tập kết quả để đảm bảo rằng các tài nguyên được đóng đúng cách, cũng như trong trường hợp ngoại lệ. try-with-resources của Java 7 tuyên bố rất hữu ích trong việc này, nó sẽ tự động đóng tài nguyên khi try khối đã hoàn thành.

Đây là một đoạn viết lại nhỏ:

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();
    }

}

(điều này có thể được cấu trúc lại nếu cần thiết như một nhà máy trừu tượng để cải thiện khả năng cắm vào)

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;
}

được sử dụng như sau:

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);
}

Tuy nhiên, trong môi trường Java EE thực, bạn nên ủy quyền việc tạo DataSource tới vùng chứa / máy chủ ứng dụng và lấy nó từ JNDI. Trong trường hợp Tomcat, hãy xem thêm ví dụ tài liệu này: 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. Cách kết nối nhiều cơ sở dữ liệu trong PHP, MYSQLi &PDO

  2. Cách gọi thủ tục lưu trữ MySQL bằng Python

  3. JSON_SEARCH () - Tìm đường dẫn đến chuỗi trong tài liệu JSON trong MySQL

  4. Cách sử dụng Coalesce trong MySQL

  5. Khắc phục “ERROR 3942 (HY000):Mỗi hàng của mệnh đề VALUES phải có ít nhất một cột” khi sử dụng Câu lệnh VALUES trong MySQL