引起:java.lang.StackOverflowError 在java.lang.Integer.valueOf(Integer.java:844) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:430) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445) 在
........
此com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)一直发生,直到出现stackoverflow错误。当我在Writers writeItems()中调用executeBatch()
时发生错误,因此我不确定它究竟发生在何处或原因。
3年前,面对类似问题的用户询问了这个问题。但没有回应,重新开始没有帮助。
答案 0 :(得分:0)
这看起来像是如何创建SQLException的错误。
您的方案中DB2DataStoreHelper.findMappingClass()
发生的事情实际上就是:
public Class<?> findMappingClass(SQLException e) {
// Check if 'e' is in the error map anywhere,
// if it is, return the class.
// otherwise, check the next exception in the chain
SQLException next = e.getNextException();
return findMappingClass(next);
}
因此,如果您有2个或更多SQLExceptions创建一个循环,例如:
SQLException a = new SQLException();
SQLException b = new SQLException();
a.setNextException(b);
b.setNextException(a);
然后您的异常无效,因为它会创建一个循环。因此,任何尝试处理SQLException链的代码都会在您观察时遇到无限循环。
检查您的应用程序代码,确保在任何例外中都没有创建周期。