Mysql
 sql >> Database >  >> RDS >> Mysql

MySql troppe connessioni

Con il tuo approccio, la connessione non verrà mai chiusa se viene generata un'eccezione prima il conn.close() è chiamato. Devi acquisirlo (e la dichiarazione e il set di risultati) in un try bloccalo e chiudilo nel finally bloccare. Qualsiasi codice in finally sarà sempre essere eseguito indipendentemente dal fatto che un'eccezione sia stata generata o meno. Con questo puoi garantire che le costose risorse verranno chiuse.

Ecco una riscrittura:

public int getSiteIdFromName(String name, String company) throws DataAccessException, java.sql.SQLException {
    Connection conn = null;
    Statement smt = null;
    ResultSet rs = null;
    int id = 0;
    try {
        conn = this.getSession().connection();
        smt = conn.createStatement();
        String query = "SELECT id FROM site WHERE name='" + name + "' and company_id='" + company + "'";
        rs = smt.executeQuery(query);
        rs.next();
        id = rs.getInt("id");
    } finally {
        if (rs != null) try { rs.close(); } catch (SQLException logOrIgnore) {}
        if (smt != null) try { smt.close(); } catch (SQLException logOrIgnore) {}
        if (conn != null) try { conn.close(); } catch (SQLException logOrIgnore) {}
    }
    return id;
}

Detto questo, questo codice è sensibile a SQL injection attacchi . Usa un PreparedStatement invece di Statement .

Vedi anche :