[英]Resultset relative skips last record in Java/Access
我的数据库:
+---------+-----------+---------------+-------------------+---------------+-----------------+--------------------+
| KlantId | KlantNaam | KlantVoornaam | KlantAdres | KlantPostcode | KlantWoonplaats | KlantGeboorteDatum |
+---------+-----------+---------------+-------------------+---------------+-----------------+--------------------+
| 1 | Vervoort | Dieter | Grootstraat 1 | 3500 | Hasselt | 1/01/1991 |
| 2 | Droogmans | Jos | Kleine Laan 2 | 3500 | Hasselt | 5/05/1999 |
| 3 | Severijns | Sarah | Brede Weg 3 | 3570 | Alken | 28/02/1972 |
| 4 | Peeters | Piet | Rondplein 4 | 3600 | Genk | 6/08/1973 |
| 5 | Vreemans | Veerle | Lange Boulevard 5 | 3500 | Hasselt | 4/04/1980 |
+---------+-----------+---------------+-------------------+---------------+-----------------+--------------------+
我读过的代码:
try {
System.out.println("De klanten zijn:");
if (!rs.relative(1)) {
rs.first();
}
System.out.println("Naam en voornaam: " + rs.getString("KlantVoornaam") + " " + rs.getString("KlantNaam"));
ShowMenu();
con.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
System.exit(0);
}
出于某种奇怪的原因, rs.relative(1)
在第4条记录( "Peeters Piet"
)上返回false,而仍然剩下一个( "Vreemans Veerle"
),因此它返回到第一条记录。
这是rs.relative()
还是我的代码中的错误?
我知道我可以做到这一点
if (!rs.next()) {
rs.first();
}
但是我想知道rs.relative(1)
为什么rs.relative(1)
同样的工作。
API文档明确指出:
注意:调用方法relative(1)与调用方法next()相同,并且调用方法relative(-1)与调用方法previous()相同。
因此,我认为应该没有任何区别。 尝试对其进行调试,或者仅在调用relative(1)
来检查您所在的行之前,在System.out.println中添加getRow()
值。
编辑:查看您的代码我无法弄清楚为什么会失败,但要注意其余的方法不应该调用ShowMenu:您正在堆栈中链接调用。很难手动生成它,但是可以进行足够的用户交互使应用程序崩溃。 更好的方法是在showMenu()中循环,当用户按下5时会中断循环。
解决方案 :没错,问题是ResultSet的mySQL实现。 检查此 API文档,其中mySQL代码如我们期望的那样显示“完全相反”(驱动程序的当前版本将此类重命名为com.mysql.jdbc.ResultSetImpl,但注释仍然存在):
注意:调用relative(1)与调用next()不同,因为在没有当前行时(例如,当光标位于结果的第一行之前或最后一行之后),调用next()是有意义的组。
方法名称应以小写字母开头(遵循Java约定可使代码对其他代码更具可读性;))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.