我有一个使用EJB3的项目,当代码抛出与SQL相关的异常时,它会向开发团队发送通知。 因此,例如,使用此代码:
Query q = getEntityManager().createNativeQuery(query);
List<Object[]> results = q.getResultList();
如果我发出语法错误,我会捕获发送给devs的第一个异常java.lang.IllegalArgumentException: Parameter with that position [2] did not exist
。
在Eclipse内部,我可以看到其他异常,例如javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
,最后最后一个带有我想要捕获的消息:Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "AND"
。有没有办法获得更多详细信息?
我可以看到抑制异常数组是空的。
更新:如果我直接在org.postgresql.util.PSQLException
中插入catch
,Eclipse会说:
此异常永远不会从try语句主体
中抛出
答案 0 :(得分:0)
您在Eclipse stracktrace中看到的异常是存储在IllegalArgumentException
中的异常,形成一系列错误原因。
您可以通过遍历此原因链来获取postgres异常:
catch(IllegalArgumentException e) {
Throwable t = e;
while (t != null)
{
if (t instanceof PSQLException) {
PSQLException pe = (PSQLException)t;
// analyse the exception
break;
}
t = t.getCause();
}
}