隠された例外
Java 6u7のCachedRowSet実装でacceptChangesを呼ぶと、以下のように例外が出るがよく判らない。
Caused by: javax.sql.rowset.spi.SyncProviderException: 3同期中に競合が発生します。 at com.sun.rowset.internal.CachedRowSetWriter.writeData(CachedRowSetWriter.java:386) at com.sun.rowset.CachedRowSetImpl.acceptChanges(CachedRowSetImpl.java:859) at com.sun.rowset.CachedRowSetImpl.acceptChanges(CachedRowSetImpl.java:918)
"3同期中に競合が発生します。" そもそも、行頭の数字は何だろう。言語のメッセージを調べてみると"3 conflicts while synchronizing"となるので、3というのは現在のRowSet中の行数だろうか。
恐らくはCachedRowSetWriter#writeData中でSQLExceptionの類が発生していると思われるが、SyncProviderExceptionによってその情報が全く見えていないのが問題だ。
http://java.sun.com/javase/ja/6/docs/ja/api/javax/sql/rowset/spi/SyncResolver.html
なるほど、SyncResolverを使うための例外なのだな。試してみよう。