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