JDBC PreparedStatement Examples
PreparedStatement in JDBC allows executing parameterized queries with improved performance and security. Below are examples of common database operations using PreparedStatement:
1. Insert Data
Use the INSERT INTO SQL command with PreparedStatement to insert data into a table:
import java.sql.*;
public class InsertDataPreparedStatement {
public static void main(String[] args) {
try {
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/your_database", "root", "password");
String insertQuery = "INSERT INTO Employees (ID, Name, Age, Department) VALUES (?, ?, ?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(insertQuery);
preparedStatement.setInt(1, 1); // Set ID
preparedStatement.setString(2, "John Doe"); // Set Name
preparedStatement.setInt(3, 30); // Set Age
preparedStatement.setString(4, "Engineering"); // Set Department
int rowsAffected = preparedStatement.executeUpdate();
System.out.println(rowsAffected + " row(s) inserted.");
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2. Update Data
Use the UPDATE SQL command with PreparedStatement to update existing data in a table:
import java.sql.*;
public class UpdateDataPreparedStatement {
public static void main(String[] args) {
try {
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/your_database", "root", "password");
String updateQuery = "UPDATE Employees SET Age = ? WHERE ID = ?";
PreparedStatement preparedStatement = connection.prepareStatement(updateQuery);
preparedStatement.setInt(1, 31); // Set new Age
preparedStatement.setInt(2, 1); // Set ID
int rowsAffected = preparedStatement.executeUpdate();
System.out.println(rowsAffected + " row(s) updated.");
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3. Delete Data
Use the DELETE FROM SQL command with PreparedStatement to delete data from a table:
import java.sql.*;
public class DeleteDataPreparedStatement {
public static void main(String[] args) {
try {
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/your_database", "root", "password");
String deleteQuery = "DELETE FROM Employees WHERE ID = ?";
PreparedStatement preparedStatement = connection.prepareStatement(deleteQuery);
preparedStatement.setInt(1, 1); // Set ID to delete
int rowsAffected = preparedStatement.executeUpdate();
System.out.println(rowsAffected + " row(s) deleted.");
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4. Select Data
Use the SELECT SQL command with PreparedStatement to retrieve data from a table:
import java.sql.*;
public class SelectDataPreparedStatement {
public static void main(String[] args) {
try {
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/your_database", "root", "password");
String selectQuery = "SELECT * FROM Employees WHERE Department = ?";
PreparedStatement preparedStatement = connection.prepareStatement(selectQuery);
preparedStatement.setString(1, "Engineering"); // Set Department to filter
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println("ID: " + resultSet.getInt("ID"));
System.out.println("Name: " + resultSet.getString("Name"));
System.out.println("Age: " + resultSet.getInt("Age"));
System.out.println("Department: " + resultSet.getString("Department"));
}
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
5. Batch Update
Batch updates allow you to execute multiple SQL statements in a single batch. PreparedStatement is useful for batch processing:
import java.sql.*;
public class BatchUpdatePreparedStatement {
public static void main(String[] args) {
try {
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/your_database", "root", "password");
String batchQuery = "INSERT INTO Employees (ID, Name, Age, Department) VALUES (?, ?, ?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(batchQuery);
// Add first batch
preparedStatement.setInt(1, 2);
preparedStatement.setString(2, "Jane Smith");
preparedStatement.setInt(3, 28);
preparedStatement.setString(4, "HR");
preparedStatement.addBatch();
// Add second batch
preparedStatement.setInt(1, 3);
preparedStatement.setString(2, "Mark Lee");
preparedStatement.setInt(3, 35);
preparedStatement.setString(4, "Sales");
preparedStatement.addBatch();
// Execute batch
int[] results = preparedStatement.executeBatch();
System.out.println("Batch update completed. " + results.length + " statement(s) executed.");
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Summary of JDBC PreparedStatement Methods
Here’s a summary of the key methods used with PreparedStatement:
| Method | Description | Used For | Example |
|---|---|---|---|
| setInt() | Sets an integer value for a parameter in the SQL query. | Used for setting integer parameters. | preparedStatement.setInt(1, 1); |
| setString() | Sets a string value for a parameter in the SQL query. | Used for setting string parameters. | preparedStatement.setString(2, "John Doe"); |
| executeUpdate() | Executes an SQL statement that updates, inserts, or deletes data. | Used for DML operations like INSERT, UPDATE, DELETE. |
preparedStatement.executeUpdate(); |
| executeQuery() | Executes an SQL query that returns a result set. | Used for SELECT queries. |
resultSet = preparedStatement.executeQuery(); |
| addBatch() | Adds an SQL statement to the batch. | Used for batch updates. | preparedStatement.addBatch(); |
| executeBatch() | Executes all the SQL statements in the batch. | Used for executing batch updates. | preparedStatement.executeBatch(); |
Comparison Table: Statement vs PreparedStatement
| Feature | Statement | PreparedStatement |
|---|---|---|
| SQL Query | Direct SQL query with no parameters. | Parameterized query with placeholders for parameters. |
| Security | More vulnerable to SQL injection attacks. | Prevents SQL injection attacks by using parameterized queries. |
| Performance | Slower when executing the same query multiple times. | Faster for repeated queries as it can be precompiled. |
| Code Complexity | More code for dynamic parameters. | Cleaner code with dynamic parameter setting using setXXX methods. |
| Use Case | Suitable for simple, one-time queries. | Ideal for repeated queries or queries with variable parameters. |
| Reusability | Cannot be reused with different parameters. | Can be reused with different parameters by setting new values. |
Key Points:
Statementis used for simple queries without parameters.PreparedStatementis used for queries with parameters and offers better performance and security.- While
Statementre-creates the SQL query each time,PreparedStatementcan be precompiled, improving efficiency, especially when executing the same query multiple times. PreparedStatementhelps prevent SQL injection attacks by using placeholders for parameters, making it more secure thanStatement.