Junior
Jaka jest różnica między PreparedStatement a Statement?
sobes.tech AI
Odpowiedź od AI
Statement jest używany do wykonywania statycznych zapytań SQL. Kompiluje się za każdym razem podczas wykonania.
PreparedStatement jest używany do wykonywania zapytań SQL z parametrami. Zapytanie jest kompilowane raz podczas tworzenia obiektu PreparedStatement i może być wielokrotnie wykonywane z różnymi wartościami parametrów.
Główne różnice:
| Funkcja | Statement | PreparedStatement |
|---|---|---|
| Wydajność | Kompiluje się za każdym razem. | Kompiluje się raz. Jest bardziej wydajny przy wielokrotnym użyciu. |
| Bezpieczeństwo | Narażony na ataki SQL injection przez konkatenację łańcuchów. | Chroni przed SQL injection dzięki automatycznemu escapowaniu parametrów. |
| Parametry | Nie obsługuje zapytań z parametrami. | Obsługuje zapytania z parametrami (?). |
| Czytelność | Mniej czytelny przy dużej ilości danych. | Bardziej czytelny przy pracy z parametrami. |
Przykład użycia Statement:
// Przykład z Statement (narażony na SQL injection)
String user = "admin";
String pass = "' OR '1'='1"; // Przykład SQL injection
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Przykład użycia PreparedStatement:
// Przykład z PreparedStatement (zabezpieczony przed SQL injection)
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();