Turns out that the version of the jdbc driver we are using has a different behavior than all other jdbc drivers. The javadoc indicates that you should be able to make repeated calls to ResultSet.next() and simply get a null when the end of the RS has been reached. But the db2 driver blows up after the first call to an exhausted (consumed) RS:
Caused by: com.ibm.db2.jcc.b.SqlException: [ibm][db2][jcc] Invalid
operation: result set is closed.
at com.ibm.db2.jcc.b.zf.lb(zf.java:3276) [diffkit-app.jar:na]
at com.ibm.db2.jcc.b.zf.c(zf.java:252) [diffkit-app.jar:na]
at com.ibm.db2.jcc.b.zf.next(zf.java:237) [diffkit-app.jar:na]
at org.diffkit.diff.sns.DKDBSource.getNextRow(DKDBSource.java:142) [diff
According to this, there is a new db2 jdbc driver that cures this behavior, and as a bonus doesn't require a license file!
This is part of the 9.5 release, so I'm not sure it will be compatible with lower versions, but seems worth a try.