sql >> Databáze >  >> RDS >> Mysql

Používám sdružování připojení JDBC?

Za předpokladu, že se jedná o BasicDataSource pochází z DBCP , pak ano, používáte fond připojení. Při každém získání připojení však znovu vytváříte další fond připojení. Ve skutečnosti nesdružujete připojení ze stejného fondu. Fond připojení musíte vytvořit pouze jednou při spuštění aplikace a získat z něj všechna připojení. Také byste neměli držet připojení jako proměnnou instance. Měli byste také zavřít připojení, příkaz a sadu výsledků, abyste zajistili správné uzavření zdrojů, a to i v případě výjimek. Java 7 try-with-resources prohlášení je v tomto užitečné, při try automaticky zavře zdroje blok je dokončen.

Zde je menší přepsání:

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

}

(toto může být v případě potřeby změněno na abstraktní továrnu, aby se zlepšila připojitelnost)

a

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

který má být použit následovně:

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

Ve skutečném prostředí Java EE byste však měli delegovat vytvoření DataSource na kontejner / aplikační server a získat jej od JNDI. V případě Tomcatu viz také například tento dokument:http ://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html



  1. Jak používat obrázky v Android SQLite, které jsou větší než omezení CursorWindow?

  2. Jak se připojit k databázi MySQL

  3. Zrušte vnoření pole o jednu úroveň

  4. Příkaz UPDATE v Oracle pomocí SQL nebo PL/SQL pro aktualizaci POUZE prvního duplicitního řádku