首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jaybird (Firebird )绝对()方法

Jaybird (Firebird )绝对()方法
EN

Stack Overflow用户
提问于 2016-09-10 18:42:22
回答 1查看 199关注 0票数 2

absolute(int row) Java说:

将光标移动到此ResultSet对象中的给定行号。如果行号为正,则光标相对于结果集的开头移动到给定的行号。第一行是第1行,第二行是第2行,依此类推。 如果给定的行号为负数,则光标移动到相对于结果集结尾的绝对行位置。例如,调用方法绝对值(-1)将游标定位在最后一行;调用方法绝对值(-2)将游标移动到下一行到最后一行,以此类推。 如果指定的行号为零,则光标移到第一行.之前。 试图将游标定位到结果集中的第一行/最后一行之后,将游标置于第一行之前或最后一行之后。 注意:调用绝对值(1)与调用第一个()相同。调用绝对值(-1)与调用same ()相同。

当将0传递给absolute(int row)时,方法应该表现为beforeFirst(),将光标定位在第一行之前。

但使用Jaybird,我有一个例外:

代码语言:javascript
复制
Exception in thread "main" org.firebirdsql.jdbc.FBSQLException: You cannot position to the row 0 with absolute() method.
    at org.firebirdsql.jdbc.FBCachedFetcher.absolute(FBCachedFetcher.java:243)
    at org.firebirdsql.jdbc.FBCachedFetcher.absolute(FBCachedFetcher.java:232)
    at org.firebirdsql.jdbc.AbstractResultSet.absolute(AbstractResultSet.java:1371)
    at chapterA.ResultSets.main(ResultSets.java:180)

在Jaybird源(FBCachedFetcher.java)上搜索,我发现当row参数为0时,它会抛出一个异常:

代码语言:javascript
复制
private boolean absolute(int row, boolean internal) throws SQLException {
        checkScrollable();

        if (row < 0) {
            row = rows.size() + row + 1;
        }

        if (row == 0 && !internal) {
            throw new SQLException("You cannot position to row 0 with absolute() method.");
        }

有什么理由这样做吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-11 08:01:10

考虑到Javadoc,这是Jaybird中的一个bug。我创建了JDBC-453来修复Jaybird 2.2.12 (和3.0.0)中的这个问题。我做了一些考古学来找出为什么这样做。

在JDBC2/Java1.3(和更早的版本)中,历史上不允许调用absolute(0)。Java1.3.1中的ResultSet.absolute的javadoc表示(强调我的):

将光标移动到此ResultSet对象中的给定行号。 如果行号为正,则光标相对于结果集的开头移动到给定的行号。第一行是第1行,第二行是第2行,依此类推。 如果给定的行号为负数,则光标移动到相对于结果集结尾的绝对行位置。例如,调用方法绝对值(-1)将游标定位在最后一行;调用方法绝对值(-2)将游标移动到下一行到最后一行,以此类推。 试图将游标定位到结果集中的第一行/最后一行之后,将游标置于第一行之前或最后一行之后。 注意:调用绝对值(1)与调用第一个()相同。调用绝对值(-1)与调用same ()相同。 返回: 如果光标位于结果集上,则转接为true;否则为false。 抛出: 如果发生数据库访问错误,则行为0,或结果集类型为TYPE_FORWARD_ONLY

换句话说,不允许使用0作为参数值。然而,在同一条目中,“试图将游标定位到结果集中的第一行/最后一行之后将游标置于第一行之前或最后一行之后”。意味着它应该被允许。

对于JDBC 3/ Java 1.4.2 (和Java 5),这被更改为:

抛出: SQLException -如果发生数据库访问错误,或者结果集类型为TYPE_FORWARD_ONLY

突出显示的句子(“如果指定的行号为零,则光标移到第一行之前”)。只在JDBC4.1 (Java 7)中添加以作进一步澄清。

然而,从FBCachedFetcher的修订历史来看,这个限制是在2004年7月增加的,当时Java1.4.2已经可用了一段时间( Java 5已经准备好了)。当时我还没有加入这个项目,但我能想到的唯一原因是,该代码是用JDBC 2 TCK (技术兼容性工具包)测试的,因为这是最后一个公开可用的工具包,并将其更改为解决TCK报告的问题。

公开:我是Jaybird/Firebird JDBC驱动程序的开发人员。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39429401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档