Se você estiver fazendo
catch (Exception e) , message deve estar disponível em e.getMessage() . Se você estiver fazendo
catch (SQLException e) (ou qualquer que seja o tipo de exceção para seu pacote de acesso a dados) message ainda deve estar disponível em e.getMessage() . Além disso, o -20001 deve aparecer em e.getErrorCode() . Observe que pode aparecer como o valor absoluto (20001 ao contrário de -20001 ); você terá que experimentar.