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

MySql for mange forbindelser

Med din tilgang vil forbindelsen aldrig blive lukket, hvis nogen undtagelse er blevet kastet før conn.close() Hedder. Du skal erhverve det (og erklæringen og resultatsættet) i et try blokere og lukke den i finally blok. Enhver kode i finally vil altid udføres uanset om en undtagelse er blevet kastet eller ej. Med dette kan du sikre at de dyre ressourcer bliver lukket.

Her er en omskrivning:

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

Når det er sagt, er denne kode følsom over for SQL-injektion angreb . Brug en PreparedStatement i stedet for Statement .

Se også :



  1. php hvordan gemmer og læser jeg json-data via mysql?

  2. Kopier værdier fra en kolonne til en anden i samme tabel

  3. Oracle RAC VIP og ARP Primer

  4. MySql-data afkortet for kolonne 'advance' i række 1