Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL zu viele Verbindungen

Mit Ihrem Ansatz wird die Verbindung niemals geschlossen, wenn vorher eine Ausnahme ausgelöst wird das conn.close() wird genannt. Sie müssen es (und die Anweisung und Ergebnismenge) in einem try erwerben blocken und im finally schließen Block. Jeder Code in finally wird immer unabhängig davon ausgeführt werden, ob eine Ausnahme ausgelöst wurde oder nicht. Damit können Sie sicherstellen dass die teuren Ressourcen geschlossen werden.

Hier ist eine Umschreibung:

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

Allerdings ist dieser Code empfindlich gegenüber SQL-Injektion Angriffe . Verwenden Sie ein PreparedStatement statt Statement .

Siehe auch :