Junior
Qual é a diferença entre PreparedStatement e Statement?
sobes.tech IA
Resposta da IA
Statement é utilizado para executar consultas SQL estáticas. É compilado sempre que é executado.
PreparedStatement é utilizado para executar consultas SQL parametrizadas. A consulta é compilada uma única vez ao criar o objeto PreparedStatement e pode ser executada várias vezes com diferentes valores de parâmetros.
Principais diferenças:
| Funcionalidade | Statement | PreparedStatement |
|---|---|---|
| Desempenho | Compila a cada execução. | Compila uma vez. É mais eficiente na reutilização. |
| Segurança | Vulnerável a injeções SQL por concatenação de strings. | Protege contra injeções SQL através do escape automático de parâmetros. |
| Parâmetros | Não suporta consultas parametrizadas. | Suporta consultas parametrizadas (?). |
| Legibilidade | Menos legível ao trabalhar com muitos dados. | Mais legível ao trabalhar com parâmetros. |
Exemplo de uso de Statement:
// Exemplo com Statement ( vulnerável a injeções SQL)
String user = "admin";
String pass = "' OR '1'='1"; // Exemplo de injeção SQL
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Exemplo de uso de PreparedStatement:
// Exemplo com PreparedStatement ( protegido contra injeções 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();