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