Como tratar uma excepção org.postgresql.util.PSQLException

Olá,

Quero tratar uma excepção deste género:
org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint “aprovacoes_pkey”

para mostrar uma mensagem ao utilizador mais intuitiva ex. “já existe uma aprovação com esse número!”

Existe algum código de erro para analisar ou tenho mesmo que analisar a mensagem? Se tiver que analisar essa string existe algum parser que ajude nesta tarefas?

Obrigado.

Se eu entendi bem sua dúvida, acho que vc tem que capturar a excessão e usar getErrorCode()
(public int getErrorCode()Retrieves the vendor-specific exception code for this SQLException object. )
para identificar o erro pelo código e atribuir a respectiva mensagem.

Já tentei isso mas retorna sempre zero. Experimentei o método ex.getSQLState() que retorna SQL return codes cujo o significado é explicado em:

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/db2/rbafzmstcksql.htm

No entanto esta solução tb não resolvia o meu problema visto que com esse código apenas é possível identificar o erro e não qual o campo que o provoca. Então resolvi fazer um parser para analisar msg do tipo : org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint “aprovacoes_pkey”

A solução foi a possível e não a óptima!

Mas fica aqui a minha experiência e pode ser que haja melhores soluções.

Muito obrigado pela resposta!

Queria saber como tratar essa exceção…

Esta exceção está sendo lançada quando executo getEm().persist(entidade); Mas tentei fazer um catch e o netbeans não aceita…

Queria saber como podia fazer esse try catch… Na minha classe tenho algo parecido com isso aqui embaixo

    @PersistenceContext
    private EntityManager em;

    public EntityManager getEm() {
        return this.em;
    }

    public Entidade metodoPersistir(Entidade entidade) {
        try {
             getEm().persist(entidade);
        } catch (XXXXXException e) {
             System.out.println("EXCEÇÃO");
        } finally {
            return entidade;
        }
    }

queria saber o que deveria colocar no lugar de XXXXXException

Obrigado.