🚀 Boost Your Java Career!
Get the latest Spring tutorials delivered straight to your feed. Join Ram N Java today!
CLICK HERE TO SUBSCRIBEUpdating Multiple Rows with Object Array in Spring JDBC
In this guide, we'll explore a powerful way to update records in your database using Spring JdbcTemplate. Specifically, we'll look at how to handle queries with multiple dynamic parameters using an Object[] array.
The SQL Update Command
When you need to update a row based on multiple conditions, your SQL uses placeholders (?) for each value. For example, changing an employee's name based on their ID and current age:
Why Use an Object Array?
Spring's update method is overloaded. While you can pass parameters individually, using an Object Array (new Object[] {param1, param2...}) is highly beneficial because:
- Cleaner Code: It keeps your method calls organized even with 5 or 10 parameters.
- Flexibility: It easily handles different data types (String, Integer, etc.) in one go.
- Readability: It's easy for other developers to see exactly which values correspond to which placeholders.
Step-by-Step Implementation
1. Define the SQL: Create a string with your UPDATE statement and ? placeholders.
2. Prepare the Data: Pack your new values into an Object[]. Make sure the order matches the ? in your SQL!
3. Call the Method: Use jdbcTemplate.update(sql, objectArray). Spring handles the rest!
⚠️ Reminder:
Always ensure the order of elements in your Object Array matches the order of placeholders in your SQL string to avoid updating the wrong data!
More from the Spring JDBC Series
Check out these related videos on Ram N Java to master Spring JDBC:
Click here to watch on Youtube:
https://www.youtube.com/watch?v=qKzoZubuBL8&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring + JdbcTemplate + Update the rows with multiple parameters with object array example |
CREATE TABLE `employee` (
`EMPLOYEE_ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`NAME` VARCHAR(100) NOT NULL,
`AGE` INT(10) NOT NULL,
`SALARY` INT(10) DEFAULT NULL,
PRIMARY KEY (`EMPLOYEE_ID`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `employee` (`EMPLOYEE_ID`, `NAME`, `AGE`, `SALARY`) VALUES('1','Peter','28','80000');
INSERT INTO `employee` (`EMPLOYEE_ID`, `NAME`, `AGE`, `SALARY`) VALUES('2','John','50','40000');
INSERT INTO `employee` (`EMPLOYEE_ID`, `NAME`, `AGE`, `SALARY`) VALUES('3','David','45','20000');
pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ram.core</groupId>
<artifactId>SpringDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringDemo</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>5.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring 5 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- MySQL database driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
</dependencies>
</project>
EmployeeDAO.java
public interface EmployeeDAO
{
public int updateEmployeeNameBasedOnAge(String name, int age);
}
EmployeeDAOImpl.java
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import com.ram.employee.dao.EmployeeDAO;
public class EmployeeDAOImpl extends JdbcDaoSupport implements EmployeeDAO
{
public int updateEmployeeNameBasedOnAge(String name, int age)
{
String sql = "update Employee set Name=? where AGE=?";
int numberOfRowsAffected = getJdbcTemplate().update(sql,
new Object[] { name, age });
return numberOfRowsAffected;
}
}
applicationContext.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/org_db" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<bean id="employeeDAO" class="com.ram.employee.dao.impl.EmployeeDAOImpl">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
App.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.employee.dao.EmployeeDAO;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
EmployeeDAO employeeDAO = (EmployeeDAO) context.getBean("employeeDAO");
int numberOfRowsAffected = employeeDAO
.updateEmployeeNameBasedOnAge("Juli", 28);
System.out.println("numberOfRowsAffected = " + numberOfRowsAffected);
System.out.println("Employee name updated successfully.");
}
}
Output:
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@35d176f7: startup date [Thu Feb 14 10:42:47 IST 2019]; root of context hierarchy
Feb 14, 2019 10:42:47 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Feb 14, 2019 10:42:48 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
Thu Feb 14 10:42:57 IST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
numberOfRowsAffected = 1
Employee name updated successfully.
Click the below link to download the code:
https://sites.google.com/site/javaspringram2019/java_spring_2019/SpringDemo_update_object_array.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/Java_Spring_2019/tree/master/Spring_2019/SpringDemo_update_object_array
Bitbucket Link:
https://bitbucket.org/ramram43210/java_spring_2019/src/8f8b5563b7f2921ed260908e4906103995d9c6cc/Spring_2019/SpringDemo_update_object_array/?at=master
See also: