Docker 在Java中处理Presto结果集:“SQLException:不在有效行上”

Docker 在Java中处理Presto结果集:“SQLException:不在有效行上”,docker,testng,integration-testing,resultset,presto,Docker,Testng,Integration Testing,Resultset,Presto,My有两个组件: 记录对Presto进行的查询的统计信息的 有些用于散列MD5、SHA1公共数据类型varchar、long和返回结果为varchar 我已经做了: 查询日志组件的集成测试mvn验证 散列UDF的单元测试 在UDF组件的集成测试中,我通过触发一个查询来断言UDF返回的值 Connection connection = DriverManager.getConnection(PRESTO_URL, PRESTO_USER, PRESTO_PASSWORD); Statement s

My有两个组件:

记录对Presto进行的查询的统计信息的 有些用于散列MD5、SHA1公共数据类型varchar、long和返回结果为varchar 我已经做了:

查询日志组件的集成测试mvn验证 散列UDF的单元测试 在UDF组件的集成测试中,我通过触发一个查询来断言UDF返回的值

Connection connection = DriverManager.getConnection(PRESTO_URL, PRESTO_USER, PRESTO_PASSWORD);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT SHA1(9223372036854775807) AS hash");
assertEquals("458B642B137E2C76E0B746C6FA43E64C3D4C47F1", resultSet.getString("hash"));
这将提供以下堆栈跟踪

注意:ExtendedHashFunctionsTestIT.java:39行是包含resultSet.getString的行

我很困惑,因为只有当我尝试访问ResultSet时才会发生错误;评论出资产质量。。语句使测试成功运行

更令人不安的是,几乎任何查询的堆栈跟踪都是相同的:

选择“某个字符串”作为某个别名 显示模式 我正在用它做测试。我已经把相关的文件放在

ExtendedHashFunctionsTestIT.java简化集成测试文件 pom.xml Dockerfile
想到这一点,我感到很遗憾,因为这个错误吞噬了我两天的时间

Connection connection = DriverManager.getConnection(PRESTO_URL, PRESTO_USER, PRESTO_PASSWORD);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT SHA1(9223372036854775807) AS hash");
resultSet.next();
assertEquals("458B642B137E2C76E0B746C6FA43E64C3D4C47F1", resultSet.getString("hash"));
第四行:我错过了resultSet.next,而不是resultSet.getString.:-

我打赌这是一个更好的地方,为这类问题。另外,对于不需要JDBC的单元测试,请参见Presto代码库中的TestArrayFunctions示例
Connection connection = DriverManager.getConnection(PRESTO_URL, PRESTO_USER, PRESTO_PASSWORD);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT SHA1(9223372036854775807) AS hash");
resultSet.next();
assertEquals("458B642B137E2C76E0B746C6FA43E64C3D4C47F1", resultSet.getString("hash"));