Neste tutorial, você aprenderá como atualizar dados no banco de dados MySQL usando a interface JDBC PreparedStatement.
A PreparedStatement
interface estende a Statement
interface que fornece alguns recursos mais avançados, como segue:
- Adicione parâmetros à sua instrução SQL usando espaços reservados na forma de pontos de interrogação (?). Isso ajuda a evitar a injeção de SQL.
- Reutilize o
PreparedStatement
com novos parâmetros caso precise executar a instrução SQL várias vezes com parâmetros diferentes. - Ajude a aumentar o desempenho da instrução executada pré-compilando a instrução SQL.
Usaremos o PreparedStatement
para atualizar os sobrenomes dos candidatos na candidates
tabela.
Primeiro, você abre uma conexão com o banco de dados MySQL reutilizando a classe de utilitário chamada MySQLJDBCUtil
que desenvolvemos no tutorial anterior .
Connection conn = MySQLJDBCUtil.getConnection();
Linguagem de código: Java ( java )
Segundo, você constrói uma instrução SQL UPDATE e cria PreparedStatement
o objeto chamando o prepareStatement()
método do Connection
objeto. O prepareStatement()
método aceita vários parâmetros. Neste exemplo, você passa uma string que é uma instrução SQL.
String sqlUpdate = "UPDATE candidates "
+ "SET last_name = ? "
+ "WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sqlUpdate);
Linguagem de código: Java ( java )
Observe que existem dois pontos de interrogação (?) como espaços reservados para os campos last_name
e id
.
Terceiro, você fornece valores para os espaços reservados um por um usando o método setYYY() da interface PreparedStatement, onde YYY é o tipo de dados do espaço reservado.
Por exemplo, se você deseja atualizar o sobrenome do candidato com o id 100
para William
, você pode definir os valores para os espaços reservados da seguinte forma:
String lastName = "William";
int id = 100;
pstmt.setString(1, lastName);
pstmt.setInt(2, id);
Linguagem de código: Java ( java )
Quarto, você envia a UPDATE
instrução com os valores dos espaços reservados para o MySQL chamando o executeUpdate()
método da PreparedStatement
interface. Este método não aceita argumentos e retorna o número de linhas afetadas.
int rowAffected = pstmt.executeUpdate();
Linguagem de código: Java ( java )
Caso queira reutilizar o PreparedStatement
, você precisa preencher novos valores para os placeholders e chamar o método executeUpdate()
novamente. Por exemplo, se quiser atualizar o sobrenome de um candidato com o id 101
para Grohe
, você pode fazer da seguinte forma:
// reuse the prepared statement
lastName = "Grohe";
id = 101;
pstmt.setString(1, lastName);
pstmt.setInt(2, id);
rowAffected = pstmt.executeUpdate();
Linguagem de código: Java ( java )
Como sempre, você deve fechar PreparedStatement
chamando seu close()
método.
pstmt.close()
Linguagem de código: Java ( java )
Caso você use a instrução try-with-resources, não será necessário fazer isso explicitamente. A seguir ilustra o exemplo completo de uso PreparedStatement
para atualizar dados.
package org.mysqltutorial;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
*
* @author tutorials.acervolima.com
*/
public class Main {
/**
* Update candidate demo
*/
public void update() {
String sqlUpdate = "UPDATE candidates "
+ "SET last_name = ? "
+ "WHERE id = ?";
try (Connection conn = MySQLJDBCUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sqlUpdate)) {
// prepare data for update
String lastName = "William";
int id = 100;
pstmt.setString(1, lastName);
pstmt.setInt(2, id);
int rowAffected = pstmt.executeUpdate();
System.out.println(String.format("Row affected %d", rowAffected));
// reuse the prepared statement
lastName = "Grohe";
id = 101;
pstmt.setString(1, lastName);
pstmt.setInt(2, id);
rowAffected = pstmt.executeUpdate();
System.out.println(String.format("Row affected %d", rowAffected));
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
/**
* main method
*
* @param args
*/
public static void main(String[] args) {
update();
}
}
Linguagem de código: Java ( java )
Antes de executar o programa, vamos examinar os candidatos atuais com id 100 e 101 no banco de dados mysqljdbc :
SELECT * FROM candidates
WHERE id = 100 OR id = 101;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O resultado da consulta é o seguinte:
Ao executar o programa Java acima, você verá a seguinte saída:
Se você executar a instrução SELECT novamente, verá que as alterações foram aplicadas à candidates
tabela.
É importante observar que você pode usar qualquer instrução como SELECT , INSERT , DELETE , etc.PreparedStatement
Neste tutorial, mostramos como atualizar dados no MySQL usando a interface JDBC PrepareStatement.