Java一直在等待完成服务器端执行的慢速MySQL查询,没有抛出错误

Java一直在等待完成服务器端执行的慢速MySQL查询,没有抛出错误,java,mysql,Java,Mysql,我正在用java程序查询一个远程MySQL服务器。查询是select语句,可能需要一分钟到半小时的时间。返回的数据大小始终相同(我正在计算行数) 程序通常执行时没有任何问题,但有时它会在较长的查询中卡住。它不会中止(java程序仍在“运行”),也不会抛出错误。当我检查MySQL服务器进程列表时,查询没有列出,错误日志也是空的,所以我假设它已经完成了执行 我在每次查询之前和之后都有一个直接的打印,因此我确信程序会被查询卡住 我认为这是一个连接超时问题,所以我将autoreconnect设置为tru

我正在用java程序查询一个远程MySQL服务器。查询是select语句,可能需要一分钟到半小时的时间。返回的数据大小始终相同(我正在计算行数)

程序通常执行时没有任何问题,但有时它会在较长的查询中卡住。它不会中止(java程序仍在“运行”),也不会抛出错误。当我检查MySQL服务器进程列表时,查询没有列出,错误日志也是空的,所以我假设它已经完成了执行

我在每次查询之前和之后都有一个直接的打印,因此我确信程序会被查询卡住

我认为这是一个连接超时问题,所以我将autoreconnect设置为true,但没有帮助。我对如何解决这个问题一无所知,因为没有抛出错误

Java代码如下所示:

Class.forName("com.mysql.jdbc.Driver");
DBConnection=DriverManager.getConnection(DBConnectionURL);
DBStatement=DBConnection.createStatement();

// being of loop
System.out.println("starting query " +selectQuery);
qA=DBStatement.executeQuery(selectQuery);
System.out.println("finished query " +selectQuery);
// do sth with query
// end of loop

如果程序被卡住,最后的输出总是一个基于粘贴的java代码的开始查询[…]

。错误如下:

当您调用MySQL并打印“starting query…”时,会发生以下两种情况之一:要么查询正常,您会看到“finished query…”,要么抛出异常,跳过“finished query…”,然后执行处理异常的代码

什么样的例外情况会导致这种情况:

如果selectQuery是动态修改的,则可能是格式错误的查询异常

如果selectQuery不是动态的并且可以工作,那么它可能是它的参数

如果selectQuery良好且参数良好,则可能是连接超时问题:sql占用的时间超过了java连接中设置的时间


要确定这一点,您必须在“catch/finally”块中打印异常的stacktrace。它将向您揭示问题所在。一个简单的谷歌搜索问题的原因应该告诉你如何解决它。

结果集有多大?MySQL JDBC连接器会在返回之前缓冲所有行,因此您可以看到延迟。

执行查询后的日志是否就在调用下方?如果抛出异常,您是否有日志?您是否单独在Toad中运行了较长的查询?结果是什么。您如何确定这只是特定的查询。如果您可能正在使用,您是否检查了数据库锁定。@AlexandreSantos您能重新表述一下吗?@vikeng21该程序大部分时间都会正常执行,只是有时会卡住。查询总是一样的,所以我知道它们在工作。我知道这是一个特殊的查询,因为我在每次查询之前和之后都会看到System.out.println(“got to point X”)。你能详细说明一下数据库锁定吗?你能展示一下你用来调用MySQL的java代码吗?没有引发异常,这就是为什么我无法确定问题的原因。粘贴整个代码,从你得到异常的地方到你关闭连接的地方。我没有得到异常。结果集总是相同大小,而且程序大部分时间执行良好,所以这不是问题所在。