Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySql terlalu banyak koneksi

Dengan pendekatan Anda, koneksi tidak akan pernah ditutup jika ada pengecualian yang dilemparkan sebelum conn.close() disebut. Anda perlu mendapatkannya (dan pernyataan dan hasil) dalam try blokir dan tutup di finally memblokir. Kode apa saja di finally akan selalu dieksekusi terlepas dari pengecualian telah dilemparkan atau tidak. Dengan ini Anda dapat memastikan bahwa sumber daya yang mahal akan ditutup.

Berikut penulisan ulang:

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

Karena itu, kode ini sensitif terhadap injeksi SQL serangan . Gunakan PreparedStatement bukannya Statement .

Lihat juga :



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah QSql::Out dan QSql::InOut digunakan di luar pemanggilan prosedur store?

  2. ORDER BY nilai yang sama di MySQL

  3. Mendapatkan jalur MySQL di command prompt

  4. Pernyataan Kondisi - Php Mysqli

  5. Host mysql Docker tidak diistimewakan