sql >> Database >  >> RDS >> Mysql

MySql te veel verbindingen

Met jouw aanpak zal de verbinding nooit worden gesloten als er een uitzondering wordt gegenereerd voordat de conn.close() wordt genoemd. Je moet het (en het statement en de resultatenset) verkrijgen in een try blok en sluit het in de finally blok. Elke code in finally zal altijd worden uitgevoerd, ongeacht of er een uitzondering is gegenereerd of niet. Hiermee kunt u ervoor zorgen dat de dure bronnen zullen worden gesloten.

Hier is een herschrijving:

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

Dat gezegd hebbende, deze code is gevoelig voor SQL-injectie aanvallen . Gebruik een PreparedStatement in plaats van Statement .

Zie ook :



  1. Hoe lege spaties in null-waarden om te zetten met behulp van SQL Server?

  2. Is er een manier om DBMS_Alert te gebruiken om een ​​Winform-toepassing op de hoogte te stellen van een databasewijziging?

  3. Vier veelvoorkomende mythes over cloudtechnologie

  4. ListArray Zelfde records opslaan