在MySQL ResultSet#getRow()
中返回< 1当光标位置在最后一行之后。我刚切换到MariaDB。我打电话给ResultSet#next()
,然后打电话给ResultSet#getRow()
。当结果集为空时,ResultSet#getRow()
为MariaDB返回1。
如果这真的是MariaDB的工作原理,那么有很多代码需要改变。或者我做错了什么,问题只存在于我身上?
ResultSet
是java.sql.ResultSet
。 RHEL 7.0上的MariaDB版本为10.0.14。我将 mariadb-java-client-1.1.7.jar 与Tomcat 8.0.15和Java 8一起使用。
答案 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()
的数据库,您将遇到类似的问题。