Junior
PreparedStatement ile Statement arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Statement, statik SQL sorgularını çalıştırmak için kullanılır. Her çalıştırmada derlenir.
PreparedStatement, parametreli SQL sorgularını çalıştırmak için kullanılır. Sorgu, PreparedStatement nesnesi oluşturulurken bir kez derlenir ve farklı parametre değerleriyle tekrar tekrar çalıştırılabilir.
Ana farklar:
| Özellik | Statement | PreparedStatement |
|---|---|---|
| Performans | Her çalıştırmada derlenir. | Bir kez derlenir. Tekrar kullanımlarda daha verimlidir. |
| Güvenlik | String birleştirme yoluyla SQL enjeksiyonlarına açıktır. | Parametrelerin otomatik kaçışıyla SQL enjeksiyonlarına karşı korur. |
| Parametreler | Parametreli sorguları desteklemez. | Parametreli sorguları (?) destekler. |
| Okunabilirlik | Çok sayıda veriyle çalışırken daha az okunabilir. | Parametrelerle çalışırken daha okunabilir. |
Statement kullanımı örneği:
// SQL enjeksiyonlarına açık örnek
String user = "admin";
String pass = "' OR '1'='1"; // SQL enjeksiyonu örneği
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
PreparedStatement kullanımı örneği:
// SQL enjeksiyonlarına karşı korumalı örnek
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();