"当前位置在最后一行之后"当ResultSet#getRow()返回1时

时间:2014-11-20 10:41:10

标签: java jdbc mariadb

在MySQL ResultSet#getRow()中返回< 1当光标位置在最后一行之后。我刚切换到MariaDB。我打电话给ResultSet#next(),然后打电话给ResultSet#getRow()。当结果集为空时,ResultSet#getRow()为MariaDB返回1。

如果这真的是MariaDB的工作原理,那么有很多代码需要改变。或者我做错了什么,问题只存在于我身上?

ResultSetjava.sql.ResultSet。 RHEL 7.0上的MariaDB版本为10.0.14。我将 mariadb-java-client-1.1.7.jar 与Tomcat 8.0.15和Java 8一起使用。

1 个答案:

答案 0 :(得分:3)

这是MariaDB中的一个错误。我非常肯定,通过查看他们的来源,如果你打电话给另一个next(),你就会得到2,依此类推。这是他们在next()中实施CachedResultSet的方式。

public boolean next() throws IOException, QueryException{
    rowPointer++;
    return rowPointer < resultSet.size();
}

通过查看他们的StreamingResultSet代码,如果切换到流式结果集,您将不会更高兴,因为如果您调用getRow(),这些将会引发异常。< / p>

我建议您更改代码,以便检查next()的结果,而不是依赖于getRow(),根据JDBC文档,这是一个可选方法。即使您向MariaDB的开发人员报告此错误并且他们已修复它,只要您的结果集足够大,您就可以切换到他们的流模式(通过更改语句&#39; s)获取大小)。如果您切换到任何其他未实现getRow()的数据库,您将遇到类似的问题。