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

MySql příliš mnoho připojení

S vaším přístupem se spojení nikdy neuzavře, pokud je vyvolána nějaká výjimka před conn.close() je nazýván. Musíte jej získat (a příkaz a sadu výsledků) v try blok a zavřete jej v finally blok. Jakýkoli kód v finally bude vždy být proveden bez ohledu na to, zda byla nebo nebyla vyvolána výjimka. S tím můžete zajistit že drahé zdroje budou uzavřeny.

Zde je přepsání:

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

To znamená, že tento kód je citlivý na vložení SQL útoky . Použijte PreparedStatement místo Statement .

Viz také :



  1. Jak hledat podřetězce Soundex() v MySQL?

  2. Říká, že nemám vybraný řádek?

  3. Volání uložené procedury Oracle s výstupním parametrem ze serveru SQL

  4. Oracle Pl/SQL:Smyčka přes uzly XMLTYPE