Mysql
 sql >> база данни >  >> RDS >> Mysql

MySql твърде много връзки

С вашия подход връзката никога няма да бъде затворена, ако е хвърлено изключение преди conn.close() е наречен. Трябва да го придобиете (и оператора и набора от резултати) в try блокирайте и го затворете в finally блок. Всеки код в finally щевинаги да се изпълни независимо дали е хвърлено изключение или не. С това можете да сигурите че скъпите ресурси ще бъдат затворени.

Ето пренаписване:

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

Въпреки това този код е чувствителен към SQL инжектиране атаки . Използвайте PreparedStatement вместо Statement .

Вижте също :



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL съхранени процедури или php код?

  2. Настройка на MySQL за бързо създаване на колона/индекс по време на разработката

  3. Mysql транзакция:извършване и връщане назад

  4. Получаване на mysql резултат от актуализация на елемент

  5. Как да приложим операция SUM без групиране на резултатите в SQL?