Обычно вы пытаетесь инкапсулировать определенные c исключения ввода-вывода, такие как SQLException, из кода вашего приложения. Так что, если вы создаете простое приложение CRUD с некоторыми типами c DAO, вы можете сопоставить SQLException, например, с более конкретными c исключениями, такими как UpdateFailedException () в предложении catch, и делегировать это исключение контроллеру. В зависимости от того, какую платформу или библиотеку вы используете для c презентации logi, вы можете сопоставить эти специфические c типы исключений с кодами HTTP-ответа с чем-то вроде глобального обработчика ошибок (некоторые платформы Crud поддерживают это). Другой вопрос: действительно ли это исключение, когда никакие данные не обновлялись? Если данные не были обновлены, данный Пользователь не был найден, вы можете проверить это с предварительным условием и, возможно, вызвать NotFoundException, которое, например, сопоставляется с кодом 404 Http. Или просто создайте его, если пользователя нет в базе данных, не вызывая исключения. В итоге это может выглядеть примерно так:
public class Controller {
public HttpResponse updateUserAction(User user) {
try {
userDao.update(User user);
return new HttpResonse(200, "User has been updated.");
} catch (UpdateException ex) {
return new HttpResponse(500, ex.getMessage());
} catch (NotFoundException ex) {
return new HttpResponse(404, ex.getMessage());
}
}
}
public class UserDao {
public void update(User userUpdate) throws NotFoundException, UpdateException {
try (Connection dbConnection = ConnectionManager.getConnection(); PreparedStatement preparedStatement = dbConnection.prepareStatement(QUERY_UPDATE);) {
//check if user exists pseudocode
if (this.get(userUpdate.getId()) == null) throw new NotFoundException("User not found");
int userId = userUpdate.getId();
String userName = userUpdate.getName();
String userMail = userUpdate.getEmail();
String userPassword = userUpdate.getPassword();
int userIdRole = userUpdate.getRole().getId_role();
preparedStatement.setString(1, userName);
preparedStatement.setString(2, userMail);
preparedStatement.setString(3, userPassword);
preparedStatement.setInt(4, userIdRole);
preparedStatement.setInt(5, userId);
preparedStatement.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
throw new UpdateException();
} catch (UpdateException ex) {
ex.prinntStackTrace();
throw ex;
}
}
}