我正在使用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 [..]
答案 0 :(得分:0)
根据您粘贴的java代码,错误是:
你正在调用MySQL并打印“开始查询......”,这是两件事之一:要么查询有效,要么看到“完成的查询......”或抛出异常并且“完成查询...“被跳过,执行转到处理异常的代码。
什么样的例外会导致这种情况:
如果selectQuery是动态修改的,那么它可能是格式错误的查询异常。
如果selectQuery不是动态的并且它可以工作,那么它可能是它的参数。
如果selectQuery很好并且参数很好,那么可能是连接超时问题:你的sql花费的时间比java连接中设置的时间长。
要确定您必须在“catch / finally”块中打印异常的堆栈跟踪。它会告诉你问题是什么。一个简单的谷歌搜索问题的原因应该告诉你如何解决它。
答案 1 :(得分:0)
结果集有多大? MySQL JDBC连接器在返回之前缓冲所有行,因此您可能只看到该滞后。