Вместо того, чтобы возвращать true или false, вы можете создать свое собственное бизнес-исключение (вероятно, иерархия по RuntimeException, которая имеет смысл для вашей проблемы).
То, как именно вы обнаружили проблему, является еще одной проблемой. Вы можете развернуть свой собственный переводчик исключений, который в зависимости от SQLException сгенерирует соответствующее (специфичное для вашего бизнеса) исключение.
Обратите внимание, что для этого конкретного метода, который вы представляете, было бы лучше сначала запросить в базе данных наличие ключа и вызвать исключение UserAlreadyExistsException (или что-то еще).