Parece que o mysql está lançando o código de erro 1062 para a chave primária duplicada. Você pode verificar o código de erro para sua exceção sql:
public static final int MYSQL_DUPLICATE_PK = 1062;
try{
//code that throws sql exception
} catch(SQLException e){
if(e.getErrorCode() == MYSQL_DUPLICATE_PK ){
//duplicate primary key
}
}
Observe que essa abordagem não é um fornecedor de banco de dados cruzado, pois fornecedores diferentes podem ter códigos de erro diferentes para PK duplicado.