-1

原因:com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:430) com.ibm.websphere.rsadapter 的 java.lang.Integer.valueOf(Integer.java:844) 的 java.lang.StackOverflowError .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 错误。当我调用executeBatch()Writers writeItems() 时会发生错误,所以我不确定它到底发生在哪里或为什么会发生。

3年前,一位面临类似问题的用户提出了这个问题。但是没有响应,重新运行也没有帮助。

DB2 JDBC 驱动程序中的无限循环

4

1 回答 1

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 链的代码都会在您观察到的情况下运行到无限循环中。

检查您的应用程序代码以确保在您的任何异常中都没有创建循环。

于 2016-08-01T17:33:21.090 回答