Junior
PreparedStatement və Statement arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Statement statik SQL sorğularını yerinə yetirmək üçün istifadə olunur. Hər icra zamanı tərtib olunur.
PreparedStatement parametrli SQL sorğularını yerinə yetirmək üçün istifadə olunur. Sorğu PreparedStatement obyektinin yaradılması zamanı bir dəfə tərtib olunur və müxtəlif parametr dəyərləri ilə çoxsaylı icra edilə bilər.
Əsas fərqlər:
| Xüsusiyyət | Statement | PreparedStatement |
|---|---|---|
| Performans | Hər icra zamanı tərtib olunur. | Bir dəfə tərtib olunur. Təkrar istifadə üçün daha səmərəlidir. |
| Təhlükəsizlik | Stringlərin birləşdirilməsi ilə SQL injection-ə açıqdı. | Parametrlərin avtomatik qaçışması ilə SQL injection-ə qarşı qoruyur. |
| Parametrlər | Parametrli sorğuları dəstəkləmir. | Parametrli sorğuları (?) dəstəkləyir. |
| Oxumaq asanlığı | Çox məlumatla işləyərkən daha az oxuna bilər. | Parametrlərlə işləyərkən daha oxunaqlıdır. |
Statement istifadə nümunəsi:
// SQL injection-ə açıq nümunə
String user = "admin";
String pass = "' OR '1'='1"; // SQL injection nümunəsi
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
PreparedStatement istifadə nümunəsi:
// SQL injection-ə qarşı qorunan nümunə
String user = "admin";
String pass = "' OR '1'='1";
String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, user);
pstmt.setString(2, pass);
ResultSet rs = pstmt.executeQuery();