Junior
223
Qual è la differenza tra PreparedStatement e Statement?
Risposta dell'AI
sobes.tech AI
Statement viene utilizzato per eseguire query SQL statiche. Viene compilato ogni volta che viene eseguito.
PreparedStatement viene utilizzato per eseguire query SQL parametrizzate. La query viene compilata una sola volta durante la creazione dell'oggetto PreparedStatement e può essere eseguita più volte con valori di parametro diversi.
Principali differenze:
| Caratteristica | Statement | PreparedStatement |
|---|---|---|
| Prestazioni | Viene compilato ad ogni esecuzione. | Viene compilato una volta sola. È più efficiente per riutilizzi. |
| Sicurezza | Vulnerabile a injection SQL tramite concatenazione di stringhe. | Protegge dalle injection SQL grazie all'escape automatico dei parametri. |
| Parametri | Non supporta query parametrizzate. | Supporta query parametrizzate (?). |
| Leggibilità | Meno leggibile con grandi quantità di dati. | Più leggibile quando si usano parametri. |
Esempio di utilizzo di Statement:
// Esempio con Statement (vulnerabile a injection SQL)
String user = "admin";
String pass = "' OR '1'='1"; // Esempio di injection SQL
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Esempio di utilizzo di PreparedStatement:
// Esempio con PreparedStatement (protetto da injection SQL)
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();