Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah saya Menggunakan Penggabungan Koneksi JDBC?

Dengan asumsi bahwa itu adalah BasicDataSource berasal dari DBCP , maka ya, Anda menggunakan kumpulan koneksi. Namun, Anda membuat ulang kumpulan koneksi lain pada setiap perolehan koneksi. Anda tidak benar-benar mengumpulkan koneksi dari kumpulan yang sama. Anda perlu membuat kumpulan koneksi hanya sekali pada saat startup aplikasi dan mendapatkan setiap koneksi darinya. Anda juga tidak boleh memegang koneksi sebagai variabel instan. Anda juga harus menutup koneksi, pernyataan, dan hasil untuk memastikan bahwa sumber daya ditutup dengan benar, juga jika ada pengecualian. try-with-resources Java 7 pernyataan sangat membantu dalam hal ini, itu akan menutup sumber daya secara otomatis ketika try blok selesai.

Berikut ini penulisan ulang kecil:

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

}

(ini dapat jika perlu difaktorkan ulang sebagai pabrik abstrak untuk meningkatkan kemampuan pluggability)

dan

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

yang akan digunakan sebagai berikut:

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

Namun, dalam lingkungan Java EE yang sebenarnya, Anda harus mendelegasikan pembuatan DataSource ke container/server aplikasi dan mendapatkannya dari JNDI. Dalam kasus Tomcat, lihat juga misalnya dokumen ini: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. Cara Mengatur Database MySQL WordPress di Cloud

  2. Cara Menghitung Persentase Kolom di MySQL

  3. Permintaan lambat saat menggunakan ORDER BY

  4. MYSQL mengimpor data dari csv menggunakan LOAD DATA INFILE

  5. Cara Meningkatkan MySQL 5.5 ke 5.6 di Ubuntu 14.04