Java等待缓慢的MySQL查询已经完成执行服务器端,没有抛出错误

时间:2014-06-09 17:07:59

标签: java mysql

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

程序通常执行没有任何问题,但有时它会陷入其中一个较长的查询。它不会中止(java程序仍然是#34;正在运行")并且没有抛出错误。当我检查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

如果程序卡住,最后一个输出始终为starting query [..]

2 个答案:

答案 0 :(得分:0)

根据您粘贴的java代码,错误是:

你正在调用MySQL并打印“开始查询......”,这是两件事之一:要么查询有效,要么看到“完成的查询......”或抛出异常并且“完成查询...“被跳过,执行转到处理异常的代码。

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

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

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

如果selectQuery很好并且参数很好,那么可能是连接超时问题:你的sql花费的时间比java连接中设置的时间长。

要确定您必须在“catch / finally”块中打印异常的堆栈跟踪。它会告诉你问题是什么。一个简单的谷歌搜索问题的原因应该告诉你如何解决它。

答案 1 :(得分:0)

结果集有多大? MySQL JDBC连接器在返回之前缓冲所有行,因此您可能只看到该滞后。