Sobes.tech
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();