У меня есть таблица Client
в Oracle
со следующими полями и их значениями:
+----------+--------------+----------------------+------------------+-----------+----------+
|client_id | client_name | url | connection_pool | username | password |
+----------+--------------+----------------------+------------------+-----------+----------+
| test | clientDb | http://clienturl.com | QA_DB | user | admin |
--------------------------------------------------------------------------------------------
Я создал PUT
запрос в моем Java
приложении, которое обновляет поля.
@PUT
@Path("/{id}")
@Consumes(MediaType.APPLICATION_JSON)
public Boolean updateClient(@PathParam("id") String id, Client client) throws DaoException {
this.setupController();
return controller.updateClientDetails(id, client);
}
ClientsController:
public Boolean updateClientDetails(String id, Client client) throws DaoException {
Client dbClient = clientDao.getClient(id)); //returns client present in table on basis of client_id
if (!client.getName().equals(dbClient.getName())) {
return clientDao.updateClientName(id, client.getName());
}
if (!client.getUrl().equals(dbClient.getUrl())) {
return clientDao.updateClientUrl(id, client.getUrl());
}
else {
LOGGER.info("Unable to update client {}", id);
return false;
}
}
ClientDao: Я обновляю client_name
и url
отдельно, как показано ниже:
public Boolean updateClientName(String id, String name) throws DaoException {
final String sql = "UPDATE client SET client_name = ? WHERE client_id = ?";
LOGGER.debug(SQL_STRING.toLogback(sql), name, id);
try (final Connection connection = dataSource.getConnection();
final PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, name);
statement.setString(2, id);
statement.executeUpdate();
return true;
} catch (SQLException ex) {
LOGGER.debug("Exception while updating client {} ", id, ex);
throw new DaoException(ex);
}
}
//updateClientUrl(String id, String url) method - similar logic as above for updating url value
При отправке запроса PUT
он обновляет поля по одному то есть, если я изменяю / обновляю более одного значения в объекте Client
в запросе body обновляет одно поле в первом запросе. Чтобы обновить второй атрибут, мне нужно отправить запрос еще раз.
Мне интересно, есть ли способ обновить более одного значения в одном запросе вместо того, чтобы отправлять больше, чем 1 запрос и наличие нескольких методов обновления для каждого поля?
Решение может быть простым, но меня это не щелкает! Любая помощь приветствуется.