Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySql quá nhiều kết nối

Với cách tiếp cận của bạn, kết nối sẽ không bao giờ bị đóng nếu bất kỳ ngoại lệ nào được thực hiện trước đó conn.close() được gọi là. Bạn cần lấy nó (và câu lệnh và bộ kết quả) trong một try chặn và đóng nó trong finally khối. Bất kỳ mã nào trong finally sẽ luôn luôn được thực thi bất kể một ngoại lệ có được ném hay không. Với điều này, bạn có thể đảm bảo rằng các tài nguyên đắt tiền sẽ bị đóng.

Đây là một bài viết lại:

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

Điều đó nói rằng, mã này nhạy cảm với chèn SQL các cuộc tấn công . Sử dụng PreparedStatement thay vì Statement .

Xem thêm :



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn tất cả dữ liệu bao gồm một bảng khác ngay cả khi null

  2. MySql Lỗi chung:2053

  3. MYSQLI ::chuẩn bị (), lỗi khi sử dụng trình giữ chỗ:cái gì đó

  4. Cách SUM từ MySQL cho mọi bản ghi n

  5. Thay đổi bảng MySQL để thêm ràng buộc khóa ngoại dẫn đến lỗi