Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySql muitas conexões


Com sua abordagem, a conexão nunca será fechada se alguma exceção for lançada antes o conn.close() é chamado. Você precisa adquiri-lo (e a instrução e o conjunto de resultados) em um try bloqueie e feche-o no finally quadra. Qualquer código em finally será sempre ser executado independentemente de uma exceção ter sido lançada ou não. Com isso você pode garantir que os recursos caros serão fechados.

Aqui está uma reescrita:
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;
}

Dito isso, este código é sensível a injeção de SQL ataques . Use um PreparedStatement em vez de Statement .

Veja também :