我在这里有点茫然。我应该为特定目的编写一个javax.sql.RowSet
的实现,我正在尽可能地对它进行单元测试。插入行上的游标会在ResultSet#next中发生什么?
现在,ResultSet
的游标可以位于普通行上(或在第一行之后或最后一行之前)或插入行中。 moveToInsertRow()
说:
只有更新,吸气,当光标位于插入行insertRow方法可以被调用。
什么是应该发生什么,然后说。 next()
没有什么帮助甚至没有指出这种情况:
移动光标froward(sic!)一行从它的当前位置。 A光标最初位于第一行之前;下一个方法的第一个调用使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。
当对下一个方法的调用返回
false
时,光标位于最后一行之后。任何需要当前行的ResultSet
方法的调用都会导致抛出SQLException
。如果结果集类型为TYPE_FORWARD_ONLY
,则供应商指定其JDBC驱动程序实现是否将返回false
或在随后调用next
时抛出SQLException
。如果输入流对当前行打开,则调用方法
next
将隐式关闭它。 AResultSet
读取新行时清除对象的警告链。返回:
true
如果新的当前行是有效的;false
如果没有更多的行抛出:
SQLException
- 如果发生数据库访问错误,或者该方法被调用关闭的结果集
我与JDBC API的没有任何经验因此不知道这是否是故意不明确的(未定义的行为可能?)或仅仅是疏忽。
目前我觉得我只是抛出一个SQLException
尽管这一直无处规定,因此也许UnsupportedOperationException
会更好(如SQLException
预示着DB错误或关闭ResultSet
- 这两者都不是这里的情况)。
还是我在某处错过了一些文档?
自我相同的文件使我的头脑旋转。假设你加载100行。 1)如果你在结果集上调用next(),他们在说什么'输入流'时说什么? 2)你可以在同一个ResultSet上再次调用absolute(-1)而不会发生SQLException吗? 3)这个“警告链”是什么? – JGFMK 2011-02-21 06:52:26
@JGFMK:1.输入流是一个`InputStream`对象,其中一个`update * Stream`方法被传入,它仍然可以打开。 2.`绝对(-1)`听起来很奇怪,现在我没有文档,但我认为这应该是一个错误,因为没有“减第一”行。 3.警告链收集数据库在调用各种方法时遇到的警告。它在我的实现中未被使用(因为CSV文件不会创建警告),所以我不在乎太多。你应该能够最终弄清楚,但是`RowSet`的200多种方法并不容易。 – Joey 2011-02-21 08:19:36