In JDBC, the executeUpdate method is used for SQL statements that modify data, such as UPDATE, INSERT, or DELETE. Unlike executeQuery, which returns a ResultSet, executeUpdate returns an int representing the number of rows affected by the operation.
Here is how you can update rows using PreparedStatement (the recommended way) and Statement.
1. Using PreparedStatement (Recommended)
This approach is more secure as it prevents SQL injection and is more efficient for queries used multiple times.
package org.kodejava.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UpdateExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/musicdb";
String user = "root";
String password = "password";
String sql = "UPDATE album SET title = ? WHERE id = ?";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
// Bind values to the placeholders (?)
pstmt.setString(1, "The White Album");
pstmt.setLong(2, 10L);
// Execute the update
int rowsAffected = pstmt.executeUpdate();
System.out.println("Rows updated: " + rowsAffected);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2. Using Statement
Use this only for simple, static SQL queries where no user input is involved.
String sql = "UPDATE album SET title = 'Rubber Soul' WHERE id = 5";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
int rowsAffected = stmt.executeUpdate(sql);
System.out.println("Rows updated: " + rowsAffected);
}
Key Points to Remember:
- Return Value: The method returns the number of rows changed. If it returns
0, it means no rows matched yourWHEREclause. - Transaction Control: If you have set
connection.setAutoCommit(false), you must callconnection.commit()afterexecuteUpdate()to persist the changes to the database. - Resource Management: Always use a try-with-resources block to ensure the
ConnectionandStatementare closed automatically, which prevents database connection leaks.
