我使用druid管理hive jdbc的连接池,然后查询一个sql大概返回的数据量有70W+,出现检索下一行异常,异常信息也不够详细,HiveQueryResultSet 388行刚好也就是异常抛出异常的代码,没法定位到具体HiveQueryResultSet next()方法那行代码出错。 请问下这个是不是跟量大有关系。下边是全部的异常栈信息。。
java.lang.NullPointerException org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [sql 语句]; SQL state [null]; error code [0]; Error retrieving next row; nested exception is java.sql.SQLException: Error retrieving next row at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:416) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:471) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:481) at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:521) at com..report.dao.spark.HiveOrSparkDao.querySqlFormHive(HiveOrSparkDao.java:44) at com..report.Thread.DataExportThread.run(DataExportThread.java:47) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.sql.SQLException: Error retrieving next row at org.apache.hive.jdbc.HiveQueryResultSet.next(HiveQueryResultSet.java:388) at com.alibaba.druid.pool.DruidPooledResultSet.next(DruidPooledResultSet.java:69) at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:92) at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60) at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:460) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:405) ... 8 more Caused by: java.lang.NullPointerException
原提问者GitHub用户Danier-Evens
当使用JDBC驱动程序从数据库中检索数据时,如果出现“java.sql.SQLException: Error retrieving next row”错误,通常是由以下原因之一引起的:
数据库连接中断
当数据库连接中断时,JDBC驱动程序无法从数据库中检索数据,因此会出现“java.sql.SQLException: Error retrieving next row”错误。这可能是由于网络问题、数据库服务器故障或其他原因导致的。
数据库查询超时
如果查询执行时间过长,可能会超出JDBC驱动程序的默认查询超时时间。这将导致JDBC驱动程序无法从数据库中检索数据,并出现“java.sql.SQLException: Error retrieving next row”错误。
您可以通过在JDBC URL中设置查询超时时间来解决此问题。例如,对于MySQL数据库,您可以使用以下JDBC URL:
Copy
jdbc:mysql://localhost:3306/mydatabase?connectTimeout=5000&socketTimeout=5000
在上面的JDBC URL中,connectTimeout和socketTimeout参数分别设置连接超时时间和查询超时时间。
数据库查询错误
如果您的SQL查询包含语法错误、逻辑错误或其他错误,可能会导致JDBC驱动程序无法从数据库中检索数据,并出现“java.sql.SQLException: Error retrieving next row”错误。请检查您的SQL查询以查找任何错误或异常。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。